3

我有一个 Web 服务的测试项目,当我在调试模式下运行测试时,一切正常。但是,当我刚刚运行测试时,对于尝试获取代码覆盖率的引用程序集,我收到以下错误:

类初始化方法 WebServiceTest.wstest.MyClassInitialize 抛出异常。System.IO.FileLoadException:System.IO.FileLoadException:无法加载文件或程序集“TestAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=57f286581e1d278a”或其依赖项之一。强名称验证失败。(来自 HRESULT 的异常:0x8013141A)---> System.Security.SecurityException:强名称验证失败。(来自 HRESULT 的异常:0x8013141A)。我发现的所有内容都说要在 GAC 中注册 TestAssembly。这是我应该做的吗?为什么它在调试模式下工作?谢谢

4

3 回答 3

5

我有同样的问题,下面的链接帮助了我......

http://weblogs.asp.net/soever/archive/2005/07/23/420338.aspx

VS.NET 2005:签名程序集的代码覆盖率 我目前正在使用 VS.NET 2005 开发一个应用程序,并且因为所有 TDD 工具(如单元测试和代码覆盖率)都可用,所以我开始使用它们。

当我开始对已签名的应用程序进行代码覆盖时,出现以下异常:

测试方法 X 抛出异常:System.IO.FileLoadException:无法加载文件或程序集 'Y,Version=1.0.0.0,Culture=neutral,PublicKeyToken=Z' 或其依赖项之一。HRESULT:0x8013141A 强名称验证失败。---> System.Security.SecurityException:来自 HRESULT 的异常:0x8013141A 强名称验证在 X 处失败。

如果你仔细想想,这并不奇怪。程序集是签名的,代码覆盖需要代码插桩,意味着对程序集的修改,导致错误的程序集因此验证失败。

解决方案是在仪器仪表后辞职。

如果您在解决方案项目中打开 localtestrun.testrunco​​nfig 文件(或类似文件)(双击它),您可以在代码覆盖率部分启用辞职。这解决了问题。

于 2010-07-19T09:28:39.183 回答
4

也可以通过执行以下命令简单地禁用特定机器上的所有签名程序集检查:

sn.exe -Vr *

但是,请谨慎使用,因为这会带来安全漏洞。我们在为我们测量覆盖率的内部虚拟机上使用它。看一下 for 的用法,sn.exe因为它可以缩小该命令的范围。

于 2011-05-10T18:23:18.353 回答
0

我正在使用 VS.Net Ultimate 2012

这个解决方案帮助了我:

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

于 2014-11-26T20:23:11.327 回答