Question

J'ai ajouté un assemblage faiblement nommé à mon projet Visual & nbsp; Studio & nbsp; 2005 . (qui est fortement nommé). Je reçois maintenant l'erreur:

  

"L'assemblage référencé 'xxxxxxxx' n'a pas de nom fort"

Dois-je signer cette assemblée tierce?

Était-ce utile?

La solution

Pour éviter cette erreur, vous pouvez soit:

  • Charger l'assemblage de manière dynamique ou
  • Signez l’assemblée tierce.

Vous trouverez des instructions sur la signature d'assemblys tiers dans .NET-fu: Signature d’un assemblage non signé (sans signature différée) .

Signature d'assemblées tierces

Le principe de base pour signer un trep-party est de

  1. Désassemblez l'assemblage à l'aide de ildasm.exe et enregistrez le langage intermédiaire (IL):

    ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll 
    
  2. Reconstruisez et signez l'assemblage:

    ilasm /dll /key=myKey.snk thirdPartyLib.il
    

Correction des références supplémentaires

Les étapes ci-dessus fonctionnent correctement sauf si votre assembly tiers ( A.dll ) fait référence à une autre bibliothèque ( B.dll ) qui doit également être signée. Vous pouvez désassembler, reconstruire et signer A.dll et B.dll à l'aide des commandes ci-dessus, mais au moment de l'exécution, le chargement de B.dll échouera car A.dll a été créé à l'origine avec une référence à la version unsigned de B.dll .

La solution à ce problème consiste à 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 

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
{
  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         
  .ver 10:0:0:0
}

Autres conseils

Développez le fichier de projet en utilisant le projet qui n'a pas de clé de nom fort " et recherchez le fichier .snk (.StrongNameKey).

Naviguez jusqu'à ce fichier dans Explorateur Windows afin de savoir où il se trouve. est).

Retour dans Visual Studio dans le projet sans "clé de nom fort", puis-je

  • Faites un clic droit sur le fichier de projet
  • Sélectionnez Propriétés
  • Sélectionnez " Onglet Signing " (à gauche)
  • Cochez la case "Signer l'assemblage"
  • .
  • Ensuite, < Parcourir > vers le fichier .snk que vous avez trouvé précédemment

Cela devrait faire l'affaire. Cela a résolu un problème pour un projet en utilisant un formulaire dans un autre projet de la même solution.

J'espère que cela vous aidera.

Je recherchais une solution au même problème en décochant la case "Signer l'assemblage". l'option fonctionne pour moi:

entrer la description de l'image ici

(vous remarquerez peut-être que la capture d'écran provient de VS2010, mais j'espère que cela aidera quelqu'un)

J'ai écrit un outil pour automatiser automatiquement les ensembles de signes avec nom fort, y compris ceux pour lesquels vous ne possédez pas le code source ou pour les projets qui ont été abandonnés. Il utilise de manière simple nombre des techniques décrites dans les réponses, sans les inconvénients ni les inconvénients des outils existants ou des instructions obsolètes.

http://brutaldev.com/post/ 2013/10/18 / NET-Assembly-Strong-Name-Signer

J'espère que cela aidera toutes les personnes qui doivent signer une assemblée d'une tierce partie sans avoir à sauter dans un cerceau pour y arriver.

Vous pouvez utiliser des assemblys non signés si votre assemblage est également non signé.

La signature de la tierce partie a fonctionné pour moi:

http: // www. codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name

MODIFIER : J'ai appris qu'il est utile de poster des étapes au cas où l'article lié ne serait plus valide. Tout le crédit va à Hiren Khirsaria :

  1. Exécutez l'invite de commande de visual studio et accédez au répertoire dans lequel se trouve votre DLL.

    Par exemple, ma DLL est située dans D: /hiren/Test.dll

  2. Créez maintenant le fichier IL à l'aide de la commande ci-dessous.

    D: / hiren > ildasm / all /out=Test.il Test.dll (cette commande génère la bibliothèque de code)

  3. Générez une nouvelle clé pour signer votre projet.

    D: / hiren > sn -k mykey.snk

  4. Signez maintenant votre bibliothèque à l’aide de la commande ilasm .

    D: / hiren > ilasm / dll /key=mykey.snk Test.il

Procédure de signature d'une assemblée tierce non signée

  1. Ouvrez l'invite de commande du développeur pour Visual Studio. Cet outil est disponible dans vos programmes Windows et peut être trouvé à l'aide de la recherche Windows par défaut.
  2. Assurez-vous que votre invite a accès aux outils suivants en les exécutant une fois: sn ildasm et ilasm
  3. Accédez au dossier dans lequel se trouve votre Cool.Library.dll
  4. sn –k Cool.Library.snk pour créer une nouvelle paire de clés
  5. ildasm Cool.Library.dll /out:Cool.Library.il pour désassembler la bibliothèque
  6. déplacez Cool.Library.dll Cool.Library.unsigned.dll pour conserver la bibliothèque d'origine en tant que sauvegarde
  7. ilasm Cool.Library.il / dll /resource=Cool.Library.res /key=Cool.Library.snk pour réassembler la bibliothèque avec un nom fort
  8. powershell -command " & amp; {[System.Reflection.AssemblyName] :: GetAssemblyName ($ args) .FullName} Cool.Library.dll "" pour obtenir le nom complet complet de l'assembly. Vous aurez besoin de ce bit si vous devez référencer la DLL dans des fichiers de configuration externes tels que web.config ou app.config.

J'avais ce problème pour une application qui s'appelait fortement, puis je devais le changer afin de référencer un assemblage qui ne s'appelait pas fortement. J'ai donc décoché "Signer l'assemblage" dans la section Signing des propriétés du projet, mais toujours. s'est plaint. Je pensais que ce devait être un artefact quelque part posant le problème puisque je faisais tout le reste correctement et c'était justement cela. J'ai trouvé et supprimé la ligne: [assembly: AssemblyKeyFile ("yourkeyfilename.snk")] de son fichier assemblyInfo.cs. Ensuite, pas de plaintes de construction après cela.

Je rencontrais ceci avec une dll ServiceStack que j'avais installée avec nuget. Il s'avère qu'il y avait un autre ensemble de DLL disponibles étiquetées signées. Ce ne sera pas la solution pour tout le monde, mais il vous suffira peut-être de rechercher une version existante signée de votre assembly. ServiceStack.Signed

Vieille question, mais je suis surpris que personne n’a encore mentionné ilmerge. ilmerge provient de Microsoft, mais n’a pas été livré avec VS ni les SDK. Vous pouvez le télécharger depuis ici . Il existe également un référentiel github . Vous pouvez également installer à partir de nuget:

PM>Install-Package ilmerge

Pour utiliser:

ilmerge assembly.dll /keyfile:key.snk /out:assembly.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /ndebug

Si nécessaire, vous pouvez générer votre propre fichier de clés à l'aide de sn (à partir de VS):

sn -k key.snk

Pour moi, le problème était que j'avais installé deux versions du même paquet NuGet avec différentes versions.

Suppression de la coche "Signer l'assemblage" sous l'onglet "Signature" fonctionne comme indiqué par @Michal Stefanow.

Ajouter ici est le moyen le plus simple de signer vos propres fichiers et / ou ceux d’autres personnes. Il vous suffit d’ajouter cette ligne sous la "Ligne de commande de l’événement post-construction":

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe" sign /f "$(ProjectDir)\YourPfxFileNameHere.pfx" /p YourPfxFilePasswordHere /d "Your software title here" /du http://www.yourWebsiteHere.com /t http://timestamp.verisign.com/scripts/timstamp.dll /v "$(BaseOutputPath)$(TargetFileName)"

Vous pouvez signer les fichiers d'autres personnes ou vos propres fichiers et autant que vous le souhaitez.

entrer la description de l'image ici

Situation: Vous avez eu le projet A, B, C, D dans la solution X, Y

Projet A, B, C sous X Projet A, C, D en Y

J'ai besoin d'utiliser le projet C dans le projet A, mais plus tard, je ne l'utilise pas. Dans le projet de débogage A bin cdll

Si je compile la solution X, tout va bien (dans cette solution, je supprime la référence A - & C; C), mais dans la solution Y, je rencontre ce problème.

La solution est delete C.dll dans le projet A Debug bin

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top