2012-04-09 8 views
8

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

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

私は型のプロバイダを誤って使用していますか、それともまだできないことですか?

答えて

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#1)のapp.configに追加する必要があります。デスクトップ上で実行すると、ポータブルFSharp.Core(2.3.5.0)がデスクトップのもの(4.3.0.0)に解決されます。

+0

華麗で、完璧に動作します。 –

関連する問題