据我所知,F#类型提供程序总是一个非可移植的类库(例如,它将使用在WinRT中不可用的Reflection.Emit)。要在我的F#类库中使用它,我需要添加对类型提供程序DLL的引用,以便该库必须是不可移植的才能编译。
在这种情况下,我很高兴分成一个便携式程序集和一个使用类型提供程序的程序集。我可以编译它的唯一方法是在我的C#应用程序项目(.NET 4.5)中添加对Fsharp.Core的引用 - 但是在运行时,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"}
我是否可以解决冲突,我是否错误地使用了类型提供程序,或者它是否是无法完成的事情?
答案 0 :(得分:8)
您的app.config文件中需要绑定重定向。如果您创建一个面向4.5的新F#项目,它将具有
<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>
app.config中的。您需要在最终消费exe项目的app.config中添加它(例如C#one),以便例如如果你在桌面上运行它,它会将便携式FSharp.Core(2.3.5.0)解析为桌面版(4.3.0.0)。