代码之家  ›  专栏  ›  技术社区  ›  Richard Ev

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

  •  2
  • Richard Ev  · 技术社区  · 15 年前

    将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在可视化研究中运行单元测试,也可以从Nunit GUI(在我们的开发人员机器和有问题的构建服务器上)运行单元测试。

    这是怎么回事?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Gamlor Gabriele Ran    15 年前

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

    可以删除生成文件中的显式版本号。因为它是由你的项目提供的,只用于测试。只需将'moq,version=3.1.416.3,…'部分更改为'moq'。然后使用提示路径的版本。

        2
  •  4
  •   flytzen    12 年前

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

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

    推荐文章