Autofixture和Moq v4

use*_*034 12 .net unit-testing moq autofixture

我使用Nuget安装了Autofixture和Moq.So我有moq版本4.

运行以下代码时

var fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.CreateAnonymous<ISomething>();
Run Code Online (Sandbox Code Playgroud)

出现以下错误

System.IO.FileLoadException:无法加载文件或程序集'Moq,Version = 3.1.416.3,Culture = neutral,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>
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?

Enr*_*lio 17

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

<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>
Run Code Online (Sandbox Code Playgroud)

有趣的是,由于进程内并行执行,使用早期版本的.NET编译的库程序集(例如Moq 3AutoFixture 2.1)将自动加载到.NET 4.0上运行的进程中.以下是MSDN对此的引用:

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

相关资源: