Procedura: Firmare un assembly con un nome sicuro

Nota

Anche se .NET Core supporta assembly con nomi sicuri e tutti gli assembly della libreria .NET Core sono firmati, la maggior parte degli assembly di terze parti non richiede nomi sicuri. Per altre informazioni, vedere Firma con nome sicuro in GitHub.

Sono disponibili diversi modi per firmare un assembly con un nome sicuro:

  • Usando la pagina Compilazione>Assegnazione di nome sicuro in Creazione progetti per un progetto in Visual Studio. Questo è il modo più semplice e più pratico per firmare un assembly con un nome sicuro.
  • Usando Assembly Linker (Al.exe) per collegare un modulo di codice di .NET Framework (un file con estensione netmodule) a un file di chiave.
  • Utilizzando attributi dell'assembly per inserire le informazioni relative al nome sicuro nel codice. È possibile utilizzare l'attributo AssemblyKeyFileAttribute o AssemblyKeyNameAttribute , a seconda della posizione del file di chiave da utilizzare.
  • Utilizzando le opzioni del compilatore.

Per firmare un assembly con un nome sicuro, è necessario disporre di una coppia di chiavi crittografiche. Per altre informazioni sulla creazione di una coppia di chiavi, vedere Procedura: Creare una coppia di chiavi pubblica/privata.

Per creare e firmare un assembly con un nome sicuro usando Visual Studio

  1. In Esplora soluzioniaprire il menu di scelta rapida per il progetto, quindi scegliere Proprietà.
  2. Nella scheda Compilazione è disponibile un nodo Assegnazione di nome sicuro.
  3. Selezionare la casella di controllo Firma l'assembly, espandendo le opzioni.
  4. Selezionare il pulsante Sfoglia per scegliere un percorso per il file di chiave con nome sicuro.

Nota

Per ritardare la firma di un assembly, scegliere un file di chiave pubblica.

Visual Studio 2022: Project properties, Build / Strong naming section.

Creare e firmare l'assembly con un nome sicuro usando Assembly Linker

Aprire Prompt dei comandi per gli sviluppatori di Visual Studio o Visual Studio Developer PowerShell e immettere il comando seguente:

al/out:<assemblyName><moduleName>/keyfile:<keyfileName>

Dove:

  • assemblyName è il nome dell'assembly con nome sicuro (un file con estensione dll o exe) che verrà generato da Assembly Linker.
  • moduleName è il nome di un modulo di codice di .NET Framework (un file con estensione netmodule) che include uno o più tipi. È possibile creare un file netmodule durante la compilazione del codice con l'opzione /target:module in C# o in Visual Basic.
  • keyfileName è il nome del contenitore o del file che contiene la coppia di chiavi. Assembly Linker interpreta un percorso relativo in relazione alla directory corrente.

L'esempio seguente firma l'assembly MyAssembly.dll con un nome sicuro utilizzando il file di chiave sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

Per ulteriori informazioni sull'utilizzo di questo strumento, vedere Assembly Linker.

Firmare un assembly con un nome sicuro usando attributi

  1. Aggiungere l'attributo System.Reflection.AssemblyKeyFileAttribute o AssemblyKeyNameAttribute al file del codice sorgente, specificando il nome del file o del contenitore contenente la coppia di chiavi da utilizzare per la firma dell'assembly con un nome sicuro.

  2. Compilare normalmente il file del codice sorgente.

    Nota

    Nei compilatori C# e Visual Basic vengono pubblicati avvisi del compilatore (rispettivamente CS1699 e BC41008) quando viene rilevato l'attributo AssemblyKeyFileAttribute o AssemblyKeyNameAttribute nel codice sorgente. È possibile ignorare gli avvisi.

L'esempio seguente usa l'attributo AssemblyKeyFileAttribute con un file di chiave denominato keyfile.snk, che si trova nella directory in cui viene compilato l'assembly.

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

È inoltre possibile ritardare la firma di un assembly durante la compilazione del file del codice sorgente. Per altre informazioni, vedere Ritardo della firma di un assembly.

Firmare un assembly con un nome sicuro usando il compilatore

Compilare il file o i file del codice sorgente con l'opzione del compilatore /keyfile o /delaysign in C# e Visual Basic o con l'opzione del linker /KEYFILE o /DELAYSIGN in C++. Dopo il nome di opzione, aggiungere due punti e il nome del file di chiave. Se si utilizzano compilatori della riga di comando, è possibile copiare il file di chiave nella directory contenente i file del codice sorgente.

Per informazioni sul ritardo della firma, vedere Ritardo della firma di un assembly.

L'esempio seguente usa il compilatore C# e firma l'assembly UtilityLibrary.dll con un nome sicuro usando il file di chiave sgKey.snk.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

Vedi anche