web-dev-qa-db-ja.com

.NET Standardプロジェクトでのdllへの参照の追加とNuGetパッケージの追加

ソリューションに.NET Standard 2.0プロジェクトがあり、IConfigurationインターフェイスを使用しています。 VSという名前を書くとき、Microsoft.Extensions.Configuration.Abstractions.dllを参照することを提案します。実行すると、参照ノードの下に追加されます。ただし、NuGetパッケージとして追加することもできます。両方の方法が機能するようです。 VSが示唆する参照は、プロジェクトで参照される.NET Standard SDKを介して追加されると想定しています。

その参照を追加する推奨方法はどれですか?各アプローチの長所と短所は何ですか?

15
Stilgar

手動でダウンロードされた、または既知の場所にインストールされたNuGetパッケージからDLLを直接参照すると、復元およびビルドプロセスを高速化できますが、いくつかの危険があります。

DLLファイルが参照できない場合、NuGetパッケージが参照されたときにできることはたくさんあります。パッケージからDLLを参照する場合は、パッケージが次の可能性について次のいずれか/アカウントを実行していないことを確認してください。

  • 追加のNuGetパッケージを依存関係としてプルできます。 DLLを新しいパッケージからアップグレードする場合、依存関係が変更されたかどうかを確認し、それに応じてプロジェクトを更新する必要があります。
  • NuGetパッケージは、さまざまな参照および実装アセンブリを提供できます。 NuGetパッケージは、ref/フォルダーに「API surface」dllを提供し、lib/に.NET Framework .NET Core、Xamarinなどのさまざまな実装アセンブリを含めることができます。フォルダ。正しいDLLファイルを選択してプロジェクトタイプを参照するように注意する必要があります。NET標準ライブラリは、ref-Assembly(例:コンパイル時にref/netstandard1.4/foo.dllを参照する必要があります。このライブラリを使用するNET Frameworkアプリケーションは、lib/net452/foo.dllなどからアセンブリを参照する必要があります。
  • NuGetパッケージには、ビルド出力に追加される追加のランタイム固有および/またはターゲットフレームワーク固有のコンテンツが含まれる場合があります。これは、ネイティブライブラリ(Windowsでは.dll、Linuxなどでは.so-runtime/サブフォルダから)または任意のコンテンツファイルです。 .nuspecファイルでもコンテンツファイルのビルドアクションを定義できるため、NuGetを使用せずにこれを正しく実行することは困難です。
  • ビルドロジックは、製品を正しく使用するために必要なビルド中に特定のプロパティを設定したり、ターゲットを実行したりするNuGetパッケージに含めることができます。これは、.csprojファイルを正しい方法で編集せずに手動で行うことは不可能です。

NuGetパッケージが上記のいずれも使用していない場合(手動で確認する必要がある場合)、代わりにDLLを参照しても安全です。ただし、DLLとその依存関係の更新は多くの作業であり、NuGetを使用する方が簡単です。

また、.NET Coreツールのnugetフォールバックフォルダーから直接参照することも言及しました。このフォルダーには、他のインストール(インストールされているSDKバージョンに応じて)に特定のバージョンのDLLが含まれることは保証されず、異なるマシンの別の場所にインストールされ、プロジェクトファイルが他の人に使用できなくなる可能性があります(Windows以外のマシンでのビルドと同様に)それに取り組んでいます。

10
Martin Ullrich