我有一个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。这是我该怎么办?为什么它在调试模式下工作? 谢谢
答案 0 :(得分: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.testrunconfig文件(或类似内容)(双击它),则可以在“代码覆盖率”部分中启用“重新签名”。这解决了这个问题。
答案 1 :(得分:4)
也可以通过执行以下命令来禁用特定计算机上的所有签名程序集检查:
sn.exe -Vr *
但是,请谨慎使用,因为这会打开一个安全漏洞。我们在内部虚拟机上使用它来测量我们的覆盖范围。请查看sn.exe
的用法,因为可以缩小该命令的范围。
答案 2 :(得分:0)
我正在使用VS.Net Ultimate 2012
这个解决方案帮助了我:
右键点击Test Project->属性 - >构建标签 - > switch生成序列化程序集到off->完成