Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une organisation peut avoir une paire de clés étroitement protégée que les développeurs ne peuvent pas accéder quotidiennement. La clé publique est souvent disponible, mais l’accès à la clé privée n’est limité qu’à quelques personnes. Lors du développement d’assemblys avec des noms forts, chaque assembly qui fait référence à l’assembly cible nommé fort contient le jeton de la clé publique utilisée pour donner à l’assembly cible un nom fort. Cela nécessite que la clé publique soit disponible pendant le processus de développement.
Vous pouvez utiliser la signature différée ou partielle au moment de la génération pour réserver de l’espace dans le fichier exécutable portable (PE) pour la signature de nom fort, mais différer la signature réelle jusqu’à une étape ultérieure, généralement juste avant d’expédier l’assembly.
Pour retarder la signature d’un assembly :
Obtenez la partie clé publique de la paire de clés de l’organisation qui effectuera la signature éventuelle. En règle générale, cette clé se présente sous la forme d’un fichier .snk , qui peut être créé à l’aide de l’outil Nom fort (Sn.exe) fourni par le Kit de développement logiciel (SDK) Windows.
Annotez le code source de l’assembly avec deux attributs personnalisés à partir de System.Reflection:
AssemblyKeyFileAttribute, qui transmet le nom du fichier contenant la clé publique en tant que paramètre à son constructeur.
AssemblyDelaySignAttribute, qui indique que le délai de signature est utilisé en passant true en tant que paramètre à son constructeur.
Par exemple:
[assembly:AssemblyKeyFileAttribute("myKey.snk")]; [assembly:AssemblyDelaySignAttribute(true)];
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(True)>
Le compilateur insère la clé publique dans le manifeste d’assembly et réserve de l’espace dans le fichier PE pour la signature de nom fort complète. La clé publique réelle doit être stockée pendant la génération de l’assembly afin que d’autres assemblys qui référencent cet assembly puissent obtenir la clé à stocker dans leur propre référence d’assembly.
Étant donné que l’assembly n’a pas de signature de nom fort valide, la vérification de cette signature doit être désactivée. Pour ce faire, utilisez l’option -Vr avec l’outil Nom fort.
L’exemple suivant désactive la vérification pour un assembly appelé myAssembly.dll.
sn -Vr myAssembly.dll
Pour désactiver la vérification sur les plateformes où vous ne pouvez pas exécuter l’outil Nom fort, tel que les microprocesseurs ADVANCED RISC Machine (ARM), utilisez l’option -Vk pour créer un fichier de Registre. Importez le fichier de Registre dans le Registre sur l’ordinateur sur lequel vous souhaitez désactiver la vérification. L’exemple suivant crée un fichier de Registre pour
myAssembly.dll
.sn -Vk myRegFile.reg myAssembly.dll
Avec l’option -Vr ou -Vk , vous pouvez éventuellement inclure un fichier .snk pour la signature de clé de test.
Avertissement
Ne vous fiez pas à des noms forts pour la sécurité. Ils fournissent une identité unique uniquement.
Remarque
Si vous utilisez la signature différée pendant le développement avec Visual Studio sur un ordinateur 64 bits et que vous compilez un assembly pour n’importe quel processeur, vous devrez peut-être appliquer l’option -Vr deux fois. (Dans Visual Studio, n’importe quel processeur est une valeur de la propriété de build Cible de plateforme ; lorsque vous compilez à partir de la ligne de commande, il s’agit de la valeur par défaut.) Pour exécuter votre application à partir de la ligne de commande ou de l’Explorateur de fichiers, utilisez la version 64 bits de l' Sn.exe (outil Strong Name) pour appliquer l’option -Vr à l’assembly. Pour charger l’assembly dans Visual Studio au moment du design (par exemple, si l’assembly contient des composants utilisés par d’autres assemblys de votre application), utilisez la version 32 bits de l’outil de nom fort. Cela est dû au fait que le compilateur juste-à-temps (JIT) compile l’assembly en code natif 64 bits lorsque l’assembly est exécuté à partir de la ligne de commande et au code natif 32 bits lorsque l’assembly est chargé dans l’environnement au moment du design.
Plus tard, généralement juste avant l’expédition, vous envoyez l’assembly à l’autorité de signature de votre organisation pour la signature de nom fort réelle à l’aide de l’option -R avec l’outil Nom fort.
L’exemple suivant signe un assembly appelé myAssembly.dll avec un nom fort à l’aide de la paire de clés sgKey.snk .
sn -R myAssembly.dll sgKey.snk