2016-02-18 44 views
1

我有這個非常混淆的問題(可能)XUnit和一些Nuget包。我的解決方案由一個與此問題無關的C#項目和一個F#測試項目組成。XUnit和F#核心4.3.1在類庫中加載錯誤

測試項目是一個非常簡單的類庫項目,其中包含一個.fs文件,其中包含所有測試和幾個NuGet包,其中三個是(IMO)重要的:版本1.4.1.0中的fsUnitxUnit,版本2.1中的XUnit。 0和FSharp.Core在版本4.0.0.1中。

問題是,當以下兩個條件成立時,測試總是失敗Could not load file or assembly FSharp.Core, Version=4.3.1.0:被引用的NuGet FSharp.Core的版本是4.0.0。[10]而該項目的類型是類庫。

當NuGet FSharp.Core被手動降級到版本3.1.2.5,或者projet的類型被更改爲控制檯應用時,該異常不會被拋出,並且所有測試都按照他們應該的方式通過。

就好像這並不奇怪,它只能在Windows上進行。在Linux上(或者至少travis-cl(如here所示))在任何配置下都可以正常工作。

鏈接here正在測試回購。最後三個提交顯示哪些配置有效,哪些不可用。最後一個「同樣工作」的配置沒有適當的travis配置文件,但是同時適用於Windows和Travis(測試通過)。

聲明:我絕對是NuGet包的新手,所以我可能會錯過一些非常基本的東西。

回答

3

問題是,當您的項目使用不同的版本時,FsUnit.xUnit引用FSharp.Core 4.3.1.0。

您應該可以通過使用binding redirect來解決此問題。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    ... 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.1.0" /> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

我相信你應該可以把這個到您的測試項目的App.config中和的xUnit應該找到並使用生成.dll.config文件。我會先嚐試一下。否則,您可以將綁定重定向放入xunit.console.exe.config,以便在運行xunit.console.exe時使用它。

+0

好的,我明白了,但只有當項目的類型是類庫時,問題是如何發生的? – Petrroll

+1

不確定。您是在Visual Studio 2013或更高版本中構建.exe文件,並且是否定位.NET 4.5.1?對於桌面/控制檯應用程序,Visual Studio將自動[添加綁定重定向](https://msdn.microsoft.com/en-us/library/2fc472t2(v = vs.110).aspx),如果它們是針對.NET 4.5編譯的.1 –

+0

是的,這可能是。謝謝! :) – Petrroll