提供类型供应商的便携式库

问题描述:

据我所知,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"} 

我能解决冲突,我使用类型供应商错误,或者是它的东西,不能做了吗?

您需要在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