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

  1. Dans l’ Explorateur de solutions, ouvrez le menu contextuel du projet et choisissez Propriétés.
  2. Sous l’onglet Générer, vous trouverez un nœud Nommage fort.
  3. Cochez la case Signer l’assembly, ce qui développe les options.
  4. 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.

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

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

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

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