Assembly con nomi sicuri

L'assegnazione di un nome sicuro a un assembly permette di creare un'identità univoca e prevenire gli eventuali conflitti con altri assembly.

Come si genera un assembly con nome sicuro?

Per generare un assembly con nome sicuro usare la chiave privata corrispondente alla chiave pubblica distribuita con l'assembly, oltre all'assembly stesso. L'assembly include il relativo manifesto, che a sua volta contiene i nomi e gli hash di tutti i file che costituiscono l'assembly. Gli assembly che hanno lo stesso nome sicuro devono essere uguali.

È possibile assegnare nomi sicuri agli assembly usando Visual Studio o uno strumento da riga di comando. Per altre informazioni, vedere Procedura: Firmare un assembly con un nome sicuro o Strumento Sn.exe (Strong Name).

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.

Avviso

Non usare i nomi sicuri per la sicurezza, poiché forniscono solo un'identità univoca.

Perché assegnare nomi sicuri agli assembly?

Per .NET Framework, gli assembly con nome sicuro risultano utili negli scenari seguenti:

  • 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.

  • Un'app deve accedere a versioni diverse dello stesso assembly. Ciò significa che sono necessarie più versioni di un assembly da caricare affiancate nello stesso dominio di app senza conflitti. 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.

  • Non si vuole influire negativamente sulle prestazioni delle app usando il proprio assembly, quindi si usa un assembly indipendente dal dominio. Questo richiede l'uso di nomi sicuri perché gli assembly indipendenti dal dominio devono essere installati in Global Assembly Cache.

  • Per centralizzare i servizi dell'app applicando i criteri dell'editore che prevedono l'installazione dell'assembly in Global Assembly Cache.

Per .NET Core e .NET 5+, gli assembly con nome sicuro non forniscono vantaggi concreti. Il runtime non convalida mai la firma con nome sicuro, né usa il nome sicuro per il binding di assembly.

Gli sviluppatori open source che vogliono ottenere i vantaggi relativi all'identità di un assembly con nome sicuro per una maggiore compatibilità con .NET Framework possono archiviare la chiave privata associata a un assembly nel sistema di controllo del codice sorgente.

Vedi anche