我编写了一个单元测试,它使用testsettings文件在OUT文件夹中部署一些引用的dll。我使用这个命令运行我的单元测试。
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MSTest.exe"
"/testcontainer:C:\Unittests\unit_test.dll"
"/runconfig:C:\Unittests\unit_test_settings.testsettings"
"/resultsfile:C:\Unittests\unit_test_results.trx"
我的单元测试中的某些测试运行正常,但有些测试失败并出现以下错误。
对象初始化失败(ISupportInitialize.EndInit)。名为“some_referenced_dll.resources.dll,PublicKeyToken =”的后备文化“en”的附属程序集无法找到或无法加载。这通常是一个设置问题。请考虑重新安装或修复该应用程序 System.Resources.MissingSatelliteAssemblyException:名为...
的附属程序集
为了解决此问题,我在testsettings文件中添加了some_referenced_dll.resouce.dll作为部署项,但这没有帮助。
我可以看到dll被复制到OUT文件夹中。
在我添加some_referenced_dll.dll作为对项目的引用之后,测试在VS 2012中正常运行。
更多信息:
有些测试直接使用其他dll作为参考(例如ref_dll_2.dll)并传递。这个ref_dll_2.dll也在OUT文件夹中。
我遇到的问题是dll(some_referenced_dll.resouce.dll)没有直接从我的测试中引用。我的单元测试调用了一些dev代码,它会尝试初始化一个失败的类。
强行加载dll会有意义吗?有没有办法做到这一点?
答案 0 :(得分:2)
好的,所以我终于解决了这个问题。在此记录完整性。
问题是我的MSTEST单元测试找不到资源/附属程序集(some_referenced_dll.resources.dll),因此抛出异常。我使用deploymentItem属性来部署dll(some_referenced_dll.dll)但不是资源dll。解决方案是使用deploymentItem并部署资源dll(some_referenced_dll.resources.dll)。
Bill Wang在thread提供了一个很好的答案,帮助解决了这个问题。对于一个非常恼人的问题,这是一个简单的解决方案。