私はポータブル クラス ライブラリに取り組んでおり、NuGet が PCL またはプラットフォーム固有のライブラリ (存在する場合) を使用する必要があるかどうかを判断するために使用する戦略を理解したいと考えています。
さまざまなプラットフォームと移植可能なクラス ライブラリをサポートする JSON.NET を参照するサンプル プロジェクトを作成しました。JSON.NET が NuGet から提供するものは次のとおりです。
- net20
- net35
- net40
- sl3-wp
- sl4
- sl4-windowsphone71
- winrt45
- ポータブル-net40+sl4+wp7+win8
まず、NET 4.0 を対象とするライブラリを作成し、NuGet を使用して JSON.NET への参照を追加しました。net40 ライブラリへの参照を追加しました。これは、ターゲット プラットフォームが完全に一致しているためだと思います。次に、NET 4.0.3 をターゲットにしました。まだnet40バージョンが参照されていました。次に、移植性のないライブラリ間で完全に一致しない Silverlight 5 を試しました。しかし、sl4 ライブラリが選択されました。また、Windows Phone 8 をターゲットにすると、sl4-windowsphone71 ライブラリが選択されました。
そのため、ターゲット プラットフォーム用の非移植性の互換ライブラリがある場合は常に、それが優先されるようです。JSON.NET の場合、別のポータブル ライブラリによって参照されている場合にのみ PCL が選択されます。もしそうなら、私は次の状況がどのように解決されるのか当惑しています:
ライブラリ A には 2 つのバージョンがあります。
- net40
- ポータブル-net40+sl4+wp7+win8
ライブラリ B は A を参照し、1 つのバージョンがあります。
- ポータブル-net40+sl4+wp7+win8
最後に、ライブラリ C は A と B の両方を参照し、1 つのバージョンを持ちます。
- net40
C 用に解決された lib A への参照はどのようになりますか? C は A を直接参照するため、A の net40 を取得する必要があります。ただし、C は移植可能な B も参照するため、さらに A の移植可能なバージョンを取得する必要があります。その依存関係を解決します。私は正しいですか?
更新します。いくつかのテスト プロジェクトを作成しましたが、ライブラリ C に移植性のないライブラリ A への直接参照が含まれている限り、このバージョンのライブラリが優先され、A の PCL バージョンが上書きされるようです。そのようなシナリオのようです。は許可されていません - ライブラリは、別の (移植可能な) バージョンを間接的に参照している場合、移植不可能な lib を直接参照することはできません。