2017-11-13 6 views
0

ライブラリを持っています。そのライブラリは、NET461とNETCOREAPP2_0のフルクライアントで使用されているNETSTANDARD2_0をターゲットにしています。コアアプリケーションでdllが選択される、ターゲットとなる標準およびdotnetcoreライブラリ用?

ライブラリにCore2.0固有のコードを追加したいとします。 私はAPPNETCORE2_0ターゲットを追加し、それは2つの別々のターゲットDLLを作成します

#if NETCOREAPP2_0 
#endif 

でセクションをラップするつもりです。 ライブラリをクライアントCore2.0アプリケーションから参照する際、NETCOREAPP2_0 DLLを参照し、NETSTANDARD2_0 DLLを無視しますか?

バージョンの選択順序は事前定義されていますか? ドキュメントへのリンクをありがとうございます。

答えて

2

ここに公式doc on creating these multi-targetted dllsがあります。これは、ターゲットごとに異なるdllがどのように生成されるかを説明します(net461netcoreapp1.0など)。

公式doc on how nuget resolves these to find the matching libraryは、右のdllが選択されている方法を説明します。

NuGetは、複数のアセンブリのバージョンを持っているパッケージをインストールすると、それがプロジェクトのターゲットフレームワークとアセンブリの枠組みの名前を一致させようとします。

一致するものが見つからない場合、NuGetは、プロジェクトのターゲットフレームワーク(使用可能な場合)以下の最高バージョンのアセンブリをコピーします。互換性のあるアセンブリが見つからない場合、NuGetは適切なエラーメッセージを返します。

サイドノート:希望するNETCOREAPP2_0APPNETCORE2_0ではありません。

+0

"NuGetは、プロジェクトのターゲットフレームワーク以下の最高バージョンのアセンブリをコピーします"。 netcoreapp2.0アプリケーションの場合、netcoreapp2.0ライブラリが見つからない場合はnetstandard2.0ライブラリを使用しますか? –

+2

はい。 NuGetのソースには、完全なロジックがあります。https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Frameworks/DefaultFrameworkMappings.cs#L367-L370 – omajid

+0

ありがとう、sourceコードは真実の決定的な源です –

関連する問題