繁体   English   中英

Moq文件版本和程序集版本不匹配,从而导致TeamCity出现问题?

[英]Moq file version & assembly version mismatch, causing problems in TeamCity?

设置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(在我们的开发人员机器和相关构建服务器上)运行单元测试。

这里发生了什么?

这可能是由于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>

...当然使用您会遇到错误的适当版本号和实际安装的版本。

不是100%的答案,而是一种解决方法:

您可以删除构建文件中的显式版本号。 因为它是您的项目提供的,仅用于测试。 只需将'Moq,Version = 3.1.416.3,...'部分更改为'Moq'。 然后,使用提示路径的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM