Guide pratique pour signer un assembly avec un nom fort
Notes
Bien que .NET Core prenne en charge les assemblys à nom fort et que tous les assemblys de la bibliothèque .NET Core soient signés, la majorité des assemblys tiers n’ont pas besoin de noms forts. Pour plus d’informations, consultez Signature de nom fort sur GitHub.
Il existe plusieurs façons de signer un assembly avec un nom fort :
- À l’aide de la page Créer>Nommage fort dans le concepteur de projet pour un projet dans Visual Studio. Il s'agit de la façon la plus facile et la plus pratique de signer un assembly avec un nom fort.
- À l’aide de l’utilitaire Assembly Linker (Al.exe) pour lier un module de code .NET Framework (un fichier .netmodule) à un fichier de clé.
- À l'aide d'attributs d'assembly pour insérer les informations de nom fort dans votre code. Vous pouvez utiliser l'attribut AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute , selon l'emplacement du fichier de clé à utiliser.
- À l'aide des options du compilateur.
Pour signer un assembly avec un nom fort, vous devez avoir une paire de clés de chiffrement. Pour plus d’informations sur la création d’une paire de clés, consultez Comment : créer une paire de clés publique/privée.
Créer et signer un assembly avec un nom fort à l’aide de Visual Studio
- Dans l’ Explorateur de solutions, ouvrez le menu contextuel du projet et choisissez Propriétés.
- Sous l’onglet Générer, vous trouverez un nœud Nommage fort.
- Cochez la case Signer l’assembly, ce qui développe les options.
- Sélectionnez le bouton Parcourir pour choisir un chemin d’accès au fichier de clé de nom fort.
Notes
Pour différer la signature d’un assembly, choisissez un fichier de clé publique.
Créer et signer un assembly avec un nom fort à l’aide de l’utilitaire Assembly Linker
Ouvrez l’invite de commandes développeur Visual Studio ou Visual Studio Developer PowerShell et entrez la commande suivante :
al /out:<assemblyName><moduleName> /keyfile:<keyfileName>
Où :
- assemblyName est le nom de l’assembly fortement signé (un fichier .dll ou .exe) que l’utilitaire Assembly Linker émettra.
- moduleName est le nom d’un module de code .NET Framework (un fichier .netmodule) qui inclut un ou plusieurs types. Vous pouvez créer un fichier .netmodule en compilant votre code avec le commutateur
/target:module
en C# ou Visual Basic. - keyfileName est le nom du conteneur ou du fichier qui contient la paire de clés. L’utilitaire Assembly Linker interprète un chemin d’accès relatif en relation avec le répertoire actif.
L’exemple suivant signe l’assembly MyAssembly.dll avec un nom fort à l’aide du fichier de clé sgKey.snk.
al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk
Pour plus d'informations sur l'utilisation de cet outil, consultez Assembly Linker.
Signer un assembly avec un nom fort à l’aide d’attributs
Ajoutez l'attribut System.Reflection.AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute à votre fichier de code source et spécifiez le nom du fichier ou du conteneur qui contient la paire de clés à utiliser lors de la signature de l'assembly avec un nom fort.
Compilez le fichier de code source normalement.
Notes
Les compilateurs C# et Visual Basic génèrent des avertissements (CS1699 et BC41008, respectivement) lorsqu'ils rencontrent l'attribut AssemblyKeyFileAttribute ou AssemblyKeyNameAttribute dans le code source. Vous pouvez ignorer les avertissements.
L’exemple de code suivant utilise l’attribut AssemblyKeyFileAttribute avec un fichier de clé nommé keyfile.snk, situé dans le répertoire où l’assembly est compilé.
[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>
Vous pouvez également différer la signature d'un assembly lors de la compilation de votre fichier source. Pour plus d’informations, consultez Temporiser la signature d’un assembly.
Signer un assembly avec un nom fort à l’aide du compilateur
Compilez vos fichiers de code source avec l'option du compilateur /keyfile
ou /delaysign
en C# et Visual Basic, ou l'option de l'éditeur de liens /KEYFILE
ou /DELAYSIGN
en C++. Après le nom de l'option, ajoutez une virgule et le nom du fichier de clé. Lorsque vous utilisez des compilateurs de ligne de commande, vous pouvez copier le fichier de clé dans le répertoire qui contient vos fichiers de code source.
Pour plus d’informations sur la signature différée, consultez Temporiser la signature d’un assembly.
L’exemple suivant utilise le compilateur C# et signe l’assembly UtilityLibrary.dll avec un nom fort à l’aide du fichier de clé sgKey.snk.
csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk
Voir aussi
- Créer et utiliser des assemblys avec nom fort
- Guide pratique pour créer une paire de clés publique/privée
- Al.exe (Assembly Linker)
- Temporiser la signature d’un assembly
- Les API avec nom fort lèvent l’exception PlatformNotSupportedException
- Gérer la signature d’assemblys et de manifestes
- Signature, page du Concepteur de projets