.NET 4.0 をターゲットとする F# アプリケーションで PowerPack を使用すると、問題が発生する
FSharp.PowerPack.dll
.NET 2.0 をターゲットとするものだけを参照している. FSharp.Core.dll 2.0
同時にFSharp.Core.dll 4.0
.NET 2.0 と互換性がありません。
FSharp.Core.dll 2.0
との両方4.0
が GACにある場合はどうなりますか? 4.0
現在の .NET フレームワークと互換性があるためロードFSharp.PowerPack.dll
され、すべてが既にロードされていることが通知されます。これは、アプリケーションが読み込まれるときの Visual Studio デバッガーと、依存関係をウォークスルーするときの Reflector の両方で確認できます。
ポータブルな方法でソフトウェアを再配布する必要があるまでは、すべて問題ありません。実際に必要な場合は、FSharp.Core.dll 4.0
(.NET 4.0 でサウンドを鳴らすために)コピーFSharp.PowerPack.dll
し、アプリケーションのローカル コードベースにコピーします。そして、(突然!FSharp.Core.dll 2.0
) [from PowerPack]への参照が満たされていないと文句を言います。
この問題は、既存のバージョンの FSharp.Core.dll への参照をリダイレクトするだけで、 F# PowerPack ターゲット ランタイムのトピックで述べたような残忍な方法で簡単に解決できます。
それで、質問は何ですか?
問題は、GAC にインストールされたアセンブリを参照するときに、リダイレクトなしですべてが問題ない理由です。GAC では、FSharp.Core.dll 2.0 自体の存在に満足しているように見えますが、すべての目的で 4.0 バージョンを使用して、それを破棄します。この背後にあるロジックは何ですか?
C#を介したJeffrey RichterのCLRは、それについて何も言わないようです...