强名称验证失败

时间:2008-12-31 18:34:17

标签: c# c++-cli code-signing

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

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

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

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

有什么想法吗?

11 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分: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

答案 2 :(得分:13)

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

答案 3 :(得分:7)

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

答案 4 :(得分:4)

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

语法:sn -Vr *,2d58152b8e842be2

其中" 2d58152b8e842be2"是错误消息中显示的公钥标记。不知怎的,这一点并没有解决我的问题。

答案 5 :(得分:4)

在我的情况下,我与Visual Studio 2015有同样的问题,我已经签署了程序集。

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

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

答案 6 :(得分:3)

您可以通过进入项目设置 - >开发时绕过此功能。签名 - >并取消选中"签署程序集"。

我在调试实体框架的源代码副本时遇到了这个问题。

答案 7 :(得分:2)

我今天遇到了这个,偶然发现了http://timgeerts.blogspot.co.uk/2009/08/strong-name-validation-failed.html,这似乎是解决方案。

选项1)关闭代码覆盖率(在VS 2010中,转到“测试设置” - >“数据和诊断” - >取消“代码覆盖率”旁边的“已启用”框。)

选项2)将签名密钥文件添加到代码覆盖率配置中(在VS 2010中,转到“测试设置” - >“数据和诊断” - >选择“代码覆盖率”并单击顶部的“配置”。这对应于“ key.ile用于.testsettings文件中CodeCoverage标记的属性。)

在VS 2012中,默认情况下启用代码覆盖率。可以通过适当排除的.runsettings文件禁用它。有关详细信息和示例文件,请参阅http://msdn.microsoft.com/en-us/library/jj159530.aspx。对于选项2,尽管.runsettings文件中似乎没有明确的设置,但正确的事情似乎是在签名(YMMV)方面自动发生的。但是,如果您正在引用VS 2010 .testsettings文件,则需要进行上述编辑。

答案 8 :(得分:1)

右键单击项目→属性→构建选项卡→平台目标→选择“x64”

答案 9 :(得分:0)

我正在使用VS.Net Ultimate 2012

这个解决方案帮助了我:

右键点击Project->属性 - >构建标签 - > switch生成序列化程序集到off->完成

答案 10 :(得分:0)

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