我的解决方案中有三个项目:
Web服务和Web应用程序都使用log4net和单独的配置文件,并在AssemblyInfo.cs中使用此行进行配置:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
当我浏览到网络服务的网址(http://localhost/MyWebService/MyWebService.svc)时,它会按预期显示 - 信息和指向wsdl的链接。
当我使用Web应用程序时,一切正常。代码调用Web服务并获得正确的响应。从Web应用程序和Web服务进行日志记录。
但是,当我运行单元测试时,它们都会失败并出现以下异常:
Test method MyServiceTest.MyServiceAuthTest.TestValidateCorrectly threw exception: System.ServiceModel.ServiceActivationException: The requested service, 'http://localhost/MyWebService/MyWebService.svc' could not be activated. See the server's diagnostic trace logs for more information.
在本地计算机的事件日志中,收到以下消息:
WebHost failed to process a request.
Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/12905972
Exception: System.ServiceModel.ServiceActivationException: The service '/MyWebService/MyWebService.svc' cannot be activated due to an exception during compilation. The exception message is: Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045).
我删除并替换了引用,清理并重建,甚至清除了临时的asp.net文件,都无济于事。网站调用服务没有问题,但测试失败。
有谁知道这里会发生什么?
更新:我删除了对log4net的所有引用,测试运行并且成功没有问题。显然,这远不是优选的。有什么建议吗?
更新2 :这两件事的某些组合解决了这个问题:
答案 0 :(得分:3)
您是否有从单元测试到log4net库的引用?尝试一下。
背后的原因:大多数单元测试框架在测试运行期间将二进制文件隐藏到其他地方,但是通过这样做,他们在所有情况下都找不到深层嵌套的引用。我曾经用NHibernate和log4net遇到过这个。如果是MSTest,则无法停用阴影。 NUnit GUI有一个选项,但我没有安装它,所以你必须自己寻找: - )
答案 1 :(得分:0)
我还会考虑将log4net处理添加到您的单元测试配置中。无论如何,在查看失败时,这非常有用 这个link为NUNit解释了它,其他框架也应该可以。