web-dev-qa-db-fra.com

Échec de la validation du nom fort

Deux machines Les deux avec .NET 3.5 et les redistribuables VS 2008 VC++ SP1

Un seul exe qui utilise deux DLL signées, une en C++/CLI et une en C #

L'Exe se charge et fonctionne correctement sur une machine.

De l'autre, j'obtiens "La validation du nom fort a échoué" sur l'exécutable C++ (HRESULT 0x8013141A)

Des idées?

22
rc1

Ouvrez l'invite de commande en tant qu'administrateur et entrez les commandes suivantes:

reg DELETE "HKLM\Software\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Microsoft\StrongName\Verification\*,*" /f
reg DELETE "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,*" /f
19
Butsaty

Ouvrez la commande Prompt en tant qu'administrateur et entrez la commande suivante:

"C:\Programmes\Microsoft SDK\Windows\v6.0A\Bin\x64\sn.exe" -Vr <chemin_dll>

Veillez à ce que l'argument respecte la casse. Source plus détaillée: http://blogs.msdn.com/b/keithmg/archive/2012/03/20/strong-name-validation-failed -exception-from-hresult-0x8013141a.aspx

13
Adam Szabo

Vous devez utiliser la version 64 bits de sn.exe sur un ordinateur 64 bits. (C:\Program Files\SDK Microsoft\Windows\v6.0A\Bin\x64\sn.exe)

13
Richard Hein

C’est le code qui s’exécute sur une machine "de développement" sur laquelle vous avez peut-être déjà exécuté "sn.exe -Vr AssemblyName.dll", ce qui vous permettrait d’utiliser un assembly signé en différé comme s'il était entièrement signé. Lorsque vous transférez l'assembly signé par le retard sur une autre machine et que vous l'exécutez, la validation du nom fort échouera car elle n'est pas entièrement signée.

7
Colin Desmond

Le fichier SN.EXE est manquant dans les versions les plus récentes de Visual Studio. Dans Visual studio 2012, , Vous devez utiliser "Invite de commande du développeur pour Visual studio 2012". Puis exécutez la commande "sn".

Syntaxe: sn -Vr *, 2d58152b8e842be2

où "2d58152b8e842be2" est le jeton de clé publique indiqué dans le message d'erreur. D'une certaine manière, cela seul n'a pas résolu mon problème.

4
Vishnu Prasanth

Dans mon cas, j'avais le même problème avec Visual Studio 2015 et j'avais déjà signé l'Assemblée. 

Je l'ai corrigé de la manière suivante: Faites un clic droit sur le projet à l'origine du problème -> "Propriétés" -> "Construire" -> Modifiez la valeur du champ "Cible de la plate-forme".

Je devais le changer de Any CPU à x86, mais je suppose qu'en fonction du projet et de la bibliothèque en échec, vous devriez changer sa valeur en x64.

4
christiansr85

Vous pourrez peut-être éviter ce développement en allant dans les paramètres du projet -> Signature -> et en décochant "Signer l'assemblage".

Je me suis heurté à cela aujourd'hui lors du débogage d'une copie de code source de Entity Framework.

3
jocull

J'ai rencontré cela aujourd'hui et suis tombé sur http://timgeerts.blogspot.co.uk/2009/08/strong-name-validation-failed.html , qui semble être la solution.

Option 1) Désactiver la couverture de code (dans VS 2010, accédez à Paramètres de test - ›Données et diagnostics -› Décochez la case "Activé" en regard de Couverture de code).

Option 2) Ajoutez le fichier de clé de signature à la configuration de la couverture de code (dans VS 2010, accédez à Paramètres de test - ›Données et diagnostics -› sélectionnez la couverture de code et cliquez sur "Configurer" en haut. Cela correspond à l'attribut "keyFile". pour la balise CodeCoverage dans le fichier .testsettings.)

Dans VS 2012, la couverture de code est activée par défaut. Il peut être désactivé via un fichier .runsettings avec une exclusion appropriée. Voir http://msdn.Microsoft.com/en-us/library/jj159530.aspx pour plus d'informations et un exemple de fichier. Pour l'option 2, bien qu'il ne semble pas y avoir de paramètre explicite disponible dans le fichier .runsettings, la bonne chose semble se produire automatiquement en ce qui concerne la signature (YMMV). Toutefois, si vous faites référence à un fichier .testsettings de VS 2010, vous devrez le modifier comme indiqué ci-dessus. 

2
jo.p.kennedy

Cliquez avec le bouton droit de la souris sur Projet → Propriétés → onglet Construction → cible de la plateforme → sélectionnez "x64".

1
Ayslan

J'ai résolu ce problème en allant dans le menu Générer (volet supérieur) et en disant "Rebuild xxxProject.plugin" pour ce projet spécifique uniquement, contrairement à la construction de la solution complète.

0
ToFo

Je travaille avec VS.Net Ultimate 2012

et cette solution m'a aidé:

Faites un clic droit sur Projet-> Propriétés-> Onglet Construire-> Commutateur Générer l'assemblage de sérialisation sur Off-> Terminé

0
Fery