Comment corriger l’erreur « Referenced assembly does not have a strong name »
Source : Stack Overflow [visual-studio].)*
Comment corriger l’erreur « Referenced assembly does not have a strong name »
Source : Stack Overflow [visual-studio].)*
Pour éviter cette erreur, vous pouvez soit :
Charger l’assembly dynamiquement, ou
Signer l’assembly tierce.
Vous trouverez des instructions sur la signature d’assemblies tierces dans .NET-fu: Signing an Unsigned Assembly (Without Delay Signing).
Signature d’assemblies tierces
Le principe de base pour signer une assembly tierce est de :
Désassembler l’assembly à l’aide de ildasm.exe et sauvegarder le langage intermédiaire (IL) :
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
Recompiler et signer l’assembly :
ilasm /dll /key=myKey.snk thirdPartyLib.il
Correction des références supplémentaires
Les étapes ci-dessus fonctionnent bien sauf si votre assembly tierce (A.dll) référence une autre bibliothèque (B.dll) qui doit également être signée. Vous pouvez désassembler, recompiler et signer à la fois A.dll et B.dll en utilisant les commandes ci-dessus, mais à l’exécution, le chargement de B.dll échouera car A.dll a été initialement compilée avec une référence à la version non signée de B.dll.
La solution à ce problème est de corriger le fichier IL généré à l’étape 1 ci-dessus. Vous devrez ajouter le jeton de clé publique de B.dll à la référence. Vous obtenez ce jeton en appelant :
sn -Tp B.dll
ce qui vous donnera la sortie suivante :
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92
Public key token is a8a7ed7203d87bc9
La dernière ligne contient le jeton de clé publique. Vous devez ensuite rechercher dans l’IL de A.dll la référence à B.dll et ajouter le jeton comme suit :
.assembly extern /*23000003*/ MyAssemblyName
{
*(Réponse tronquée)*