8

VS 2010,win server 2003,.Net 3.5 解决方案,从 .Net 1.1 迁移而来

解决方案中的所有项目均已延迟签名。可以为 Debug 成功构建解决方案,但对于 Release 总是失败并出现以下错误。SGEN:错误:无法加载文件或程序集“AssemblingX,版本=1.0.5000.0,Culture=neutral,PublicKeyToken=xxxxxxxx”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)

AssemblingX是我想要构建的项目。该项目的所有引用的 DLL 都保存在本地文件夹中,并且已经签名。如果我更改项目AssemblingX的属性以对其进行签名,则可以构建解决方案以成功发布。

我按照http://social.msdn.microsoft.com/Forums/nl-NL/msbuild/thread/695581ae-77e7-4c3a-bb3f-6472b8c47f65上的指导创建了一个 sgen.exe.config 以启用“loadFromRemoteSources”

但什么都没有改变。有任何想法吗?

谢谢

4

6 回答 6

19

此问题与强名称验证有关。在Ildasm.exe (C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin)中打开您的AssemblyX 。注意它,让我们举个例子。现在以管理员模式打开 VS 命令提示符并运行 sn.exe 命令。如:PublicKeyTokenpkt123

sn -Vr *,pkt123

再次构建您的解决方案,现在一切都应该没问题了。

但如果没有,并且您现在也收到相同的错误,那么您需要运行不同版本的 sn.exe。要找到它,请转到 Visual Studio 命令提示符。

c:\Program Files(x86)>dir /s sn.exe

这可能需要 5-10 秒,并且应该给出 sn.exe 文件的列表。进入路径执行sn.exe,需要的或者属于你的,如上图。如果不确定要执行哪一个,请执行所有 sn.exe。那应该而且必须解决您的问题。如果没有,请告诉我,让我再次推进 RnD。

于 2012-10-22T10:10:19.653 回答
5

由于我无法对此唯一答案发表评论,我想确保其他用户不会像我一样遇到这个答案,不会犯其他人可能犯的同样错误。根据强命名实用程序的 MSDN 文档,使用 Vr(签名跳过)开关可能会导致加载恶意程序集,并且只能在开发而不是部署中使用。

http://msdn.microsoft.com/en-us/library/k5b5tt23(v=vs.80).aspx

于 2013-05-13T18:52:57.297 回答
1

如果仍未解决,您必须在密钥中删除或设置 AllowStrongNameBypass (DWORD) 为“1”

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

在 64 位计算机上,

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework
于 2013-08-24T14:59:43.087 回答
1

在我的情况下,原因是本机库构建到不同的文件夹,然后是应用程序的其余部分。

于 2014-12-13T20:16:41.970 回答
1

打开 cmd。

Cd  "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"   

运行

sn –Vr **AssemblingX** name (without dll extension), **PublicKeyToken**

(编码)

重建解决方案。它应该得到解决。

于 2015-11-18T15:36:59.913 回答
0

我把对我有用的东西。在第一次构建时它因这个错误而失败,然后我对解决方案进行了重建,它构建得很好。

于 2021-07-26T16:31:18.677 回答