2

我在我们的构建服务器上的单个测试项目遇到了一些问题。项目中的一些测试使用 AutoFixture 和 AutoMoq。

由于 AutoMoq 使用的 Moq 版本比我们使用的版本旧,因此我们在 app.config 中有一个重定向(我假设由 AutoMoq NuGet 脚本制作):

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1409.1722" newVersion="4.2.1409.1722" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Ploeh.AutoFixture" publicKeyToken="b24654c590009d4f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.20.2.0" newVersion="3.20.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

测试在开发人员机器上运行没有问题,但是一个项目(在许多使用 AutoFixture、AutoMoq 和 Moq 的项目中)在使用 TeamCitys NUnit runner 运行时向我抛出了这个问题:

Test(s) failed. System.IO.FileLoadException : Could not load file or assembly 'Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at Ploeh.AutoFixture.AutoMoq.MockPostprocessor.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.CustomizationNode.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.TracingBuilder.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.BehaviorRoot.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Fixture.Create(Object request, ISpecimenContext context)
   at Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request)
   at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context, T seed)
   at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context)

为什么 Moq 引用(显然是 4.0.10827.0)没有重定向到 4.2.1409.1722?

我检查了构建服务器工作目录,app.config 和 dll 看起来不错。

4

2 回答 2

0

我不知道这是否会有所帮助,但我遇到了类似症状的问题,而解决方案却完全是另外一回事,即:https ://stackoverflow.com/a/3668371/487544

于 2014-11-04T14:49:12.960 回答
0

正如相关 AutoFixture 问题中所解释的那样, AutoFixture 不会也不会依赖于最新的。

您的错误消息与任何 AutoFixture 本身要求的任何版本无关,因此您的环境中的某些东西是唯一可能的解释。我会\\live.sysinternals.com\tools\procexp.exe用来看看从哪里来的。

于 2014-10-21T06:08:17.607 回答