强名称验证失败

26 c# c++-cli code-signing

两台机器..NET 3.5和VS 2008 VC++ SP1可再发行组件都有

一个使用两个签名DLL的​​exe,一个在C++/CLI中,另一个在C#中

exe在一台机器上加载并运行良好.

另一方面,我在C++可执行文件中得到"强名称验证失败"(HRESULT 0x8013141A)

有任何想法吗?

Buz*_*zzy 26

以管理员身份打开命令提示符并输入以下命令:

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
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下这到底是做什么的吗? (9认同)

Ada*_*abo 14

以管理员身份打开命令提示符并输入以下命令:

"C:\ Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sn.exe"-Vr <dllpath>

请注意该参数区分大小写.有更多详细信息的来源:http://blogs.msdn.com/b/keithmg/archive/2012/03/20/strong-name-validation-failed-exception-from-hresult-0x8013141a.aspx

  • 应该注意的是,这并没有真正"修复"任何东西,只是禁用了验证. (8认同)

Ric*_*ein 13

您必须在64位计算机上使用64位版本的sn.exe.(C:\ Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sn.exe)


Col*_*ond 7

代码是否在"开发"机器上运行,您可能在某个阶段运行"sn.exe -Vr AssemblyName.dll",这将允许您使用延迟签名的程序集,就像它已完全签名一样.将延迟签名的程序集传输到另一台计算机并运行它时,它将无法通过强名称验证,因为它未完全签名.

  • 除了在每台其他计算机上运行sn.exe之外,是否还有其他解决方法? (3认同)

小智 7

如果有人找不到 64 位版本sn.exe,请检查此处: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\x64\sn.exe


joc*_*ull 5

您可以通过进入项目设置 -> 签名 -> 并取消选中“对程序集进行签名”来在开发时绕过此问题。

我今天在针对实体框架的源代码副本进行调试时遇到了这个问题。


小智 5

较新版本的 Visual Studio 中缺少 SN.EXE。在Visual studio 2012中,我们必须使用“Visual studio 2012的开发人员命令提示符”。然后运行命令“sn”。

语法: sn -Vr *,2d58152b8e842be2

其中“2d58152b8e842be2”是错误消息中显示的公钥令牌。不知何故,仅此一点并没有解决我的问题。


chr*_*r85 5

就我而言,我遇到了同样的问题,Visual Studio 2015并且已经签署了大会。

我通过以下方式修复了该问题:右键单击导致问题的项目->“属性”->“构建”->更改“平台目标”字段的值。

我必须将其从更改为Any CPUx86但是我想在项目功能和失败的库中,应将其值更改为x64