设置TeamCity 5.0.1以首次运行单元测试,我们看到了这个错误:
测试失败。 System.IO.FileNotFoundException:无法加载文件或程序集'Moq,Version = 3.1.416.3,Culture = neutral,PublicKeyToken = 69f491c39445e920'或其依赖项之一。系统找不到指定的文件。
我们使用的是Moq版本3.1.416.3,其中dll的文件版本为3.1.0.0
我们的项目文件中的引用如下所示:
<Reference Include="Moq, Version=3.1.416.3, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\..\..\lib\binaries\thirdparty\Moq.dll</HintPath> </Reference>
我们可以使用ReSharper在Visual Studion中运行我们的单元测试,也可以从nunit GUI(在我们的开发人员机器和相关的构建服务器上)运行我们的单元测试。
这里发生了什么?
答案 0 :(得分:4)
这可能是由NuGet依赖引起的。如果你重建所有项目,你可能会在编译单元测试项目时看到一个无害的警告,如下所示:
Consider app.config remapping of assembly "Moq, Culture=neutral, PublicKeyToken=69f491c39445e920" from Version "4.0.10827.0" [] to Version "4.1.1309.1617" [C:\XXX\packages\Moq.4.1.1309.1617\lib\net40\Moq.dll] to solve conflict and get rid of warning.
此警告可能无法停止在本地计算机上运行的单元测试,但它们可能会阻止TeamCity运行它们。
您可以通过向单元测试程序集的App.config文件中添加类似的内容来消除警告并使TeamCity运行您的单元测试;
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral" />
<bindingRedirect oldVersion="4.0.10827.0" newVersion="4.1.1309.1617" />
</dependentAssembly>
</assemblyBinding>
</runtime>
...当然使用您收到错误的相应版本号以及实际安装的版本。
答案 1 :(得分:2)
不是100%的答案,而是一种解决方法:
您可以删除构建文件中的显式版本号。因为它无论如何由您的项目提供,仅用于测试。只需将'Moq,Version = 3.1.416.3,...'部分更改为'Moq'即可。然后使用提示路径的版本。