13

我使用 Nuget 安装了 Autofixture 和 Moq。所以我有 moq 版本 4。

运行以下代码时

var fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.CreateAnonymous<ISomething>();

出现以下错误

System.IO.FileLoadException:无法加载文件或程序集'Moq,版本 = 3.1.416.3,文化 = 中性,PublicKeyToken = 69f491c39445e920'

我也尝试将其重定向到 v4,但没有运气。

<configuration>
  <runtime>
    <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral"/>
      <bindingRedirect oldVersion="3.1.416.3" newVersion="4.0.10827.0"/>
    </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这里可能是什么问题?

4

2 回答 2

18

为了在配置文件中重定向程序集绑定,您需要在<assemblyBinding> 元素urn:schemas-microsoft-com:asm.v1中指定命名空间,如下例所示:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Moq"
                                  publicKeyToken="69f491c39445e920"
                                  culture="neutral"/>
                <bindingRedirect oldVersion="3.1.416.3"
                                 newVersion="4.0.10827.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

有趣的是,由于In-Process Side-by-Side 执行,使用早期版本的 .NET(例如Moq 3AutoFixture 2.1)编译的库程序集将自动加载到在 .NET 4.0 上运行的进程中。这是来自 MSDN 的关于此的引用:

如果应用程序是使用 .NET Framework 4 运行时编译的,但包含使用早期运行时构建的库,则该库也将使用 .NET Framework 4 运行时。但是,如果您有一个使用早期运行时构建的应用程序和一个使用 .NET Framework 4 构建的库,则必须强制您的应用程序也使用 .NET Framework 4

相关资源:

于 2011-06-28T11:55:40.267 回答
1

接受的答案对我不起作用,因为我想使用与AutoFixture.AutoMoq相同的类库(非 exe)中的 Moq 4 。AutoFixture似乎也没有支持 Moq 4 的计划。我最终使用AutoFixture.AutoRhinoMocks作为下一个最受欢迎的选择,它与 Moq 4 不冲突。

于 2013-09-26T19:31:16.360 回答