强命名程序集验证在本地工作,但在测试设备上失败

Posted

技术标签:

【中文标题】强命名程序集验证在本地工作,但在测试设备上失败【英文标题】:Strongly Named Assembly Validation Works Locally But Fails On A Test Device 【发布时间】:2014-07-01 13:46:00 【问题描述】:

在我的应用程序中,我引用了一个在本地运行良好的 .dll。在我构建应用程序以进行发布并在另一台计算机上对其进行测试后,库无法加载。我已将进程附加到测试计算机上的 Visual Studio 调试器,我收到的错误消息告诉我,无法验证强名称。

要在另一台计算机上进行测试,我只需构建发布解决方案并将整个发布文件夹复制到另一台计算机。所有的.dll,包括失败的,都在那里,除了一个,所有的都被成功加载。当我做同样的事情但使用该 .dll 的代码被注释掉时,一切正常。

有没有我遗漏的步骤?图书馆的强名称可以在本地但在测试计算机上进行验证,这似乎很奇怪。

【问题讨论】:

你是如何签署你的程序集的?无法验证延迟签名的程序集。 Info on signing your assemblies 【参考方案1】:

从您的症状来看,您可能为该程序集启用了延迟登录?请注意以下部分:

使用 –Vr 或 –Vk 选项,您可以选择包含 .snk 用于测试密钥签名的文件。

仅在开发期间使用 -Vr 或 -Vk 选项。添加程序集 跳过验证列表会产生安全漏洞。一种 恶意程序集可以使用完全指定的程序集名称 (程序集名称、版本、文化和公钥令牌) 程序集添加到跳过验证列表以伪造其身份。 这将允许恶意程序集也跳过验证。

您可能已经运行了它,所以它会在您的机器上传递,而不是在部署机器上。

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

【讨论】:

以上是关于强命名程序集验证在本地工作,但在测试设备上失败的主要内容,如果未能解决你的问题,请参考以下文章

共享程序集和强命名程序集(上)

对强命名的 .NET 程序集进行数字签名

.net 无法加载文件或程序集 MySql.Data。强名称验证失败 (0x8013141A)

Selenium 测试在本地工作,但在 Jenkins 中失败

加载本地化 pathForResource 在 iOS 模拟器上工作,但在设备上失败

构建在本地工作,但在 codemagic 上失败 |任务“:app:stripDebugDebugSymbols”执行失败