带类型提供程序的可移植库

时间:2012-04-09 20:40:50

标签: f# type-providers portable-class-library

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

我是否可以解决冲突,我是否错误地使用了类型提供程序,或者它是否是无法完成的事情?

1 个答案:

答案 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)。