【问题标题】:Moq file version & assembly version mismatch, causing problems in TeamCity?Moq 文件版本和程序集版本不匹配,导致 TeamCity 出现问题?
【发布时间】:2010-06-09 14:33:39
【问题描述】:

第一次设置 TeamCity 5.0.1 运行单元测试,我们看到了这个错误:

测试失败。 System.IO.FileNotFoundException:无法加载文件或程序集“Moq,版本=3.1.416.3,Culture=neutral,PublicKeyToken=69f491c39445e920”或其依赖项之一。系统找不到指定的文件。

我们使用的是 Moq 的 3.1.416.3 版本,其 dll 的 文件版本为 3.1.0.0

我们项目文件中的引用如下所示:

..\..\..\lib\binaries\thirdparty\Moq.dll参考>

我们能够使用 ReSharper 在 Visual Studion 中运行我们的单元测试,也可以从 nunit GUI(在我们的开发人员机器和相关构建服务器上)运行我们的单元测试。

这是怎么回事?

【问题讨论】:

  • 我们也遇到了同样的问题。你有没有弄清楚是什么原因造成的?

标签: versioning moq teamcity


【解决方案1】:

这可能是由 NuGet 依赖项引起的。如果您执行 Rebuild All 您的项目,您可能会在编译单元测试项目时看到一个无害的警告,如下所示:

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>

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 2020-11-27
      • 2014-05-15
      • 2013-06-18
      • 1970-01-01
      • 2011-10-13
      • 2011-04-10
      相关资源
      最近更新 更多