Assembly con nomi sicuriStrong-named assemblies

L'assegnazione di un nome sicuro a un assembly permette di creare un'identità univoca e prevenire gli eventuali conflitti con altri assembly.Strong-naming an assembly creates a unique identity for the assembly, and can prevent assembly conflicts.

Come si genera un assembly con nome sicuro?What makes a strong-named assembly?

Per generare un assembly con nome sicuro usare la chiave privata corrispondente alla chiave pubblica distribuita con l'assembly, oltre all'assembly stesso.A strong named assembly is generated by using the private key that corresponds to the public key distributed with the assembly, and the assembly itself. L'assembly include il relativo manifesto, che a sua volta contiene i nomi e gli hash di tutti i file che costituiscono l'assembly.The assembly includes the assembly manifest, which contains the names and hashes of all the files that make up the assembly. Gli assembly che hanno lo stesso nome sicuro devono essere uguali.Assemblies that have the same strong name should be identical.

È possibile assegnare nomi sicuri agli assembly usando Visual Studio o uno strumento da riga di comando.You can strong-name assemblies by using Visual Studio or a command-line tool. Per altre informazioni, vedere Procedura: Firmare un assembly con un nome sicuro o sn. exe (strumento nome sicuro).For more information, see How to: Sign an assembly with a strong name or Sn.exe (Strong Name tool).

Nel creare un assembly con nome sicuro è necessario includere il nome in formato testo semplice dell'assembly, il numero di versione, le informazioni facoltative relative alle impostazioni cultura, una firma digitale e la chiave pubblica corrispondente alla chiave privata usata per apporre la firma.When a strong-named assembly is created, it contains the simple text name of the assembly, the version number, optional culture information, a digital signature, and the public key that corresponds to the private key used for signing.

Avviso

Non usare i nomi sicuri per la sicurezza,Do not rely on strong names for security. poiché forniscono solo un'identità univoca.They provide a unique identity only.

Perché assegnare nomi sicuri agli assembly?Why strong-name your assemblies?

Quando si fa riferimento a un assembly con nome sicuro, ci si aspettano determinate garanzie, quali il controllo delle versioni e la protezione dei nomi.When you reference a strong-named assembly, you can expect certain benefits, such as versioning and naming protection. Nel .NET Framework, gli assembly con nome sicuro possono essere installati nel Global Assembly Cache, che è necessario per abilitare alcuni scenari.In the .NET Framework, strong-named assemblies can be installed in the global assembly cache, which is required to enable some scenarios.

Gli assembly con nome sicuro risultano utili negli scenari seguenti:Strong-named assemblies are useful in the following scenarios:

  • Per abilitare il riferimento agli assembly da parte degli assembly con nome sicuro o per concedere a un friend l'accesso all'assembly da altri assembly con nome sicuro.You want to enable your assemblies to be referenced by strong-named assemblies, or you want to give friend access to your assemblies from other strong-named assemblies.

  • Un'app deve accedere a versioni diverse dello stesso assembly.An app needs access to different versions of the same assembly. Ciò significa che sono necessarie più versioni di un assembly da caricare affiancate nello stesso dominio di app senza conflitti.This means you need different versions of an assembly to load side by side in the same app domain without conflict. Ad esempio , se negli assembly esistono estensioni differenti di una API con lo stesso nome semplice, l'assegnazione di un nome sicuro consente di fornire un'identità univoca a ciascuna versione dell'assembly.For example, if different extensions of an API exist in assemblies that have the same simple name, strong-naming provides a unique identity for each version of the assembly.

  • Non si vuole influire negativamente sulle prestazioni delle app usando il proprio assembly, quindi si usa un assembly indipendente dal dominio.You do not want to negatively affect performance of apps using your assembly, so you want the assembly to be domain neutral. Questo richiede l'uso di nomi sicuri perché gli assembly indipendenti dal dominio devono essere installati in Global Assembly Cache.This requires strong-naming because a domain-neutral assembly must be installed in the global assembly cache.

  • Si vuole centralizzare la manutenzione per l'app applicando i criteri dell'editore, che significa che l'assembly deve essere installato nella Global Assembly Cache.You want to centralize servicing for your app by applying publisher policy, which means the assembly must be installed in the global assembly cache.

Se si è uno sviluppatore open source e si desiderano i vantaggi di identità di un assembly con nome sicuro, è consigliabile archiviare la chiave privata associata a un assembly nel sistema di controllo del codice sorgente.If you are an open-source developer and you want the identity benefits of a strong-named assembly, consider checking in the private key associated with an assembly to your source control system.

Vedere ancheSee also