34

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

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

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

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

有任何想法吗?

4

12 回答 12

48

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

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
于 2015-12-07T12:16:52.167 回答
17

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

"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

于 2013-09-12T09:22:39.740 回答
14

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

于 2011-10-20T19:10:56.597 回答
8

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

于 2009-04-24T12:55:45.360 回答
8

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

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

我不得不将它从更改为Any CPUx86但我想在项目功能和失败的库中,您应该将其值更改为x64.

于 2016-04-05T11:20:24.207 回答
5

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

语法:sn -Vr *,2d58152b8e842be2

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

于 2015-01-14T10:01:37.297 回答
3

您可以通过进入项目设置 -> 签名 -> 并取消选中“签署程序集”来绕过开发。

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

于 2013-11-15T15:33:46.290 回答
3

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

于 2019-10-07T09:10:23.937 回答
2

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

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

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

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

于 2014-02-27T11:34:36.480 回答
2

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

于 2017-09-13T08:31:40.040 回答
0

我正在使用 VS.Net Ultimate 2012

这个解决方案帮助了我:

右键单击项目->属性->构建选项卡->将生成序列化程序集切换为关闭->完成

于 2014-11-26T17:26:07.070 回答
0

我通过转到“构建”菜单(顶部窗格)并仅针对该特定项目说“重建 xxxProject.plugin”来解决此问题,这与构建整个解决方案相反。

于 2017-05-08T08:34:34.280 回答