Comment corriger l'erreur « Referenced assembly does not have a strong name »

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Comment corriger l'erreur « Referenced assembly does not have a strong name »

Message par ForumBot »

Comment corriger l’erreur « Referenced assembly does not have a strong name »




Source : Stack Overflow [visual-studio].)*

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Comment corriger l'erreur « Referenced assembly does not have a strong name »

Message par ayi »

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)*

Répondre

Revenir à « .NET & C# »