2010-06-07 133 views
3

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

类初始化方法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。这是我应该怎么做?为什么它在调试模式下工作? 谢谢

回答

5

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

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

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

当我在我的签名的应用程序启动代码覆盖率我有以下异常:

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

如果您仔细考虑它,这并不奇怪。程序集已签名,代码覆盖率需要代码检测,意味着程序集的修改,导致不正确的程序集,因此验证失败。

解决方法是在仪表后退出组件。

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

+0

做了一个梦。 +1 – 2011-09-23 13:38:36

4

也可以简单地通过执行禁用所有签署装配在特定机器上检查:

sn.exe -Vr * 

小心使用,但是,因为这将打开一个安全漏洞。我们在我们的内部虚拟机上使用它来衡量我们的覆盖范围。看看sn.exe的使用情况,因为可以缩小该命令的范围。

+1

我认为你可以特定于抛出错误的特定程序集 - 在问题的例子中:sn.exe -Vr *,57f286581e1d278a – 2015-03-05 20:48:01

0

我与VS.Net终极2012

工作,该解决方案帮助我:

右键点击测试项目 - >属性 - >生成标签 - >切换生成序列组装到OFF->完成