新しいプロジェクトを作成するときに、VS2012 によって提供される標準の F# ポータブル ライブラリ オプションを使用して F# ライブラリを作成しました。このライブラリは、C# プログラムで使用することを目的としています。
F# ライブラリは、C# オブジェクトにカプセル化された C# アプリからのデータを受け入れる必要があります。オブジェクトを含む C# dll を F# ライブラリにインポートしましたが、次の 2 つのエラーが発生します。
プライマリ参照 "DataStructures" は、フレームワーク アセンブリ "mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089" に間接的な依存関係があるため、解決できませんでした。これは、現在対象となっているフレームワークでは解決できませんでした。".NETPortable,Version=v4.0,Profile=Profile47". この問題を解決するには、参照 "DataStructures" を削除するか、"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" を含むフレームワーク バージョンにアプリケーションを再ターゲットします。
と
プライマリ参照 "DataStructures" は、フレームワーク アセンブリ "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" に間接的に依存しているため、解決できませんでした。これは、現在対象のフレームワークでは解決できませんでした。".NETPortable,Version=v4.0,Profile=Profile47". この問題を解決するには、参照 "DataStructures" を削除するか、"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" を含むフレームワーク バージョンにアプリケーションを再ターゲットします。
メッセージを確認すると、F# と C# の dll で使用される と のmscorlib
間にバージョンの非互換性の問題があることが明らかです。System
そこで、単純に F# の参照を、C# dll で使用されている正確な参照に切り替えました。これにより一時的にエラーが解決されましたが、ビルドするとすぐに、f# ライブラリの参照が自動的に以前の「移植可能な」バージョンのmscorlib
およびに戻されましたSystem
。
これを回避するには、C# アプリにそのデータを強制的に変換させTuple<'t>
てから f# dll に送信し、このプロジェクトで C# dll の依存関係を取り除きますが、これらの変換を回避したいと考えていました。
ここに投稿があります
ベース CLI ライブラリ 'mscorlib' は、参照されている F# コア ライブラリとバイナリ互換性がありませんpass explicit references to both on the command-line
。
F# ポータブル ライブラリでこれを行う方法はありますか? または、これらの互換性の問題を解決する他の方法はありますか?
編集:次のことも確認しました:
- どちらの dll も .net 4.5 をターゲットにしています
- 両方の dll のビルド オプションは、標準の「any cpu」設定に設定されています。