2012-04-09 82 views
8

據我所知,F#類型的供應商總是要成爲一個不可移植的類庫(例如,它將使用在WinRT中不可用的Reflection.Emit)。要在我的F#類庫中使用它,我需要添加對類型提供程序DLL的引用,以便該庫必須是不可移植的才能編譯。提供類型供應商的便攜式庫

在這種情況下,我很樂意將其分成一個便攜式裝配體和一個使用類型提供器的裝配體。我可以編譯的唯一方法是將Fsharp.Core的引用添加到我的C#應用​​程序項目(.NET 4.5)中 - 但在運行時,FSharp.Core版本之間仍存在衝突。

{"Could not load file or assembly 'FSharp.Core, Version=2.3.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.":"FSharp.Core, Version=2.3.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"} 

我能解決衝突,我使用類型供應商錯誤,或者是它的東西,不能做了嗎?

回答

8

您需要在app.config文件中綁定重定向。如果您創建一個新的目標爲4.5的F#項目,它將在app.config中有

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 
     <bindingRedirect oldVersion="2.3.5.0" newVersion="4.3.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

。您需要在最終使用的exe項目(例如C#之一)的app.config中添加該項目,以便例如如果您在桌面上運行它,則會將便攜式FSharp.Core(2.3.5.0)解析到桌面(4.3.0.0)。

+0

輝煌,完美的作品。 – 2012-04-10 06:43:00