8

私が理解している限り、F#型プロバイダーは常に移植性のないクラスライブラリになります(たとえば、WinRTでは使用できないReflection.Emitを使用します)。F#クラスライブラリで使用するには、タイププロバイダーDLLへの参照を追加する必要があります。これにより、ライブラリをコンパイルするには移植性がない必要があります。

この場合、私は1つのポータブルアセンブリとタイププロバイダーを使用するアセンブリに分けて満足しています。これをコンパイルする唯一の方法は、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"}

競合を解決できますか、タイププロバイダーを誤って使用していますか、それともまだ実行できないものですか?

4

1 に答える 1

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プロジェクト(C#など)のapp.configに追加する必要があります。これにより、たとえばデスクトップで実行すると、ポータブルFSharp.Core(2.3.5.0)がデスクトップに解決されます。 1つ(4.3.0.0)。

于 2012-04-09T22:43:15.290 に答える