SGEN:错误:无法加载文件或程序集(HRESULT 异常:0x8013141A)

8

这是一个关于IT技术的问题,涉及到VS 2010、win server 2003和.Net 3.5 solution。该solution已从.Net 1.1迁移而来。

所有项目都是延迟签名的。对于Debug,可以成功构建solution,但对于Release,总是会出现以下错误:

SGEN: 错误: 无法加载文件或程序集 'AssemblingX, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=xxxxxxxx' 或其中一个依赖项。强名称验证失败。(HRESULT 的异常: 0x8013141A)

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

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

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

谢谢

6个回答

18
这个问题涉及到强名称验证。在管理员模式下打开VS命令提示符并运行sn.exe命令。例如:打开位于C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin的Ildasm.exe,查看AssemblyXPublicKeyToken,假设它是pkt123
sn -Vr *,pkt123

重新构建你的解决方案,现在一切应该都没问题了。

但如果还是有相同的错误,那么你需要运行一个不同版本的 sn.exe。要找到它,请前往 Visual Studio 命令提示符。

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

可能需要5-10秒钟,然后应该会给出sn.exe文件列表。转到路径并像上面所示执行sn.exe,如果需要或属于您。如果不确定要执行哪个,请执行所有的sn.exe。那应该可以解决你的问题。如果不能,请通知我并让我再次进行研发。


6

由于我无法对唯一的答案进行评论,所以我想确保其他用户不会像我一样犯同样的错误。根据 MSDN 强名称实用程序的文档,使用 Vr(跳过签名)开关会导致恶意程序集加载,应仅在“开发”而非“部署”中使用。

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


1
在我的情况下,原因是本地库构建到了与应用程序其他部分不同的文件夹中。

1
如果问题仍未解决,您需要删除或设置键中的AllowStrongNameBypass (DWORD)为"1",以便更好地解决问题。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

在64位计算机上,

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

and

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework

1
打开命令提示符。
Cd  "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"   

运行:

sn –Vr **AssemblingX** 名称(不包括dll扩展名),**PublicKeyToken**

(代码)

重新构建解决方案。 这样应该就解决了。


0

我分享下我的解决方式。第一次编译时出现了错误,然后我重新编译了整个解决方案,问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接