Dot-Net

自動夾具和最小起訂量 v4

  • November 16, 2015

我使用 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>

這裡可能是什麼問題?

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

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

有趣的是,由於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

相關資源:

引用自:https://stackoverflow.com/questions/6505591