パッケージを作成するときの project.json の影響
重要
このコンテンツは非推奨とされます。 プロジェクトは、packages.config
または PackageReference 形式のいずれかを使用する必要があります。
NuGet 3 以降で使用される project.json
システムは、次のセクションで示されるように、いくつかの方法でパッケージの作成者に影響します。
従来の NuGet パッケージでは、推移的な世界に引き継がれていない一連の機能がサポートされています。
依存関係の解決に関するページで説明されている推移的な復元モデルには、"パッケージのインストール時刻" の概念はありません。 パッケージは存在するか、存在しないかのいずれかですが、パッケージのインストール時に発生する一貫性のあるプロセスはありません。
また、インストール スクリプトは、Visual Studio でのみサポートされていました。 他の IDE では、このようなスクリプトをサポートするには、Visual Studio 拡張 API を模擬表示する必要があり、一般的なエディターやコマンドライン ツールではサポートされていませんでした。
インストール スクリプトと同様に、変換はパッケージのインストールで実行され、通常はべき等ではありません。 インストール時刻は存在しなくなったため、XDT 変換と同様の機能はサポートされません。また、このようなパッケージが推移的なシナリオで使用される場合は無視されます。
従来の NuGet パッケージでは、ソース コードや構成ファイルなどのコンテンツ ファイルを配布しています。 通常、次の 2 つのシナリオで使用されます。
初期ファイルはプロジェクトにドロップされるため、ユーザーは後で編集することができます。 一般的な例は、既定の構成ファイルです。
コンテンツ ファイルはプロジェクトにインストールされているアセンブリの補完として使用されます。 こちらの例は、アセンブリによって使用されるロゴ イメージになります。
現在、コンテンツのサポートは、スクリプトや変換と同じような理由で無効にされていますが、Microsoft ではコンテンツのサポートの設計を進めています。
コンテンツ ファイルはパッケージ内で引き続き実行することができ、現在は無視されますが、エンド ユーザーは引き続き適切な位置にコピーできます。
コンテンツ ファイルを戻すための提案の 1 つと、またその進捗について確認するには、https://github.com/NuGet/Home/issues/627 を参照してください。
上記の機能を使用するパッケージでは、別のメカニズムを使用する必要があります。 このために一般的に最も便利なメカニズムは、引き続き完全にサポートされる MSBuild ターゲット/プロパティになります。 ビルド システムでは、パッケージでその他の規則を選ぶことができます。 このようにして、MSBuild ターゲットが Roslyn アナライザーと同様にサポートされます。 packages.config
と project.json
シナリオ用にターゲットとアナライザーをサポートするパッケージをビルドできます。
スタートアップが簡単になるように、プロジェクトを変更しようとするパッケージは、通常、ごく限られたシナリオのセットで動作するため、代わりに readme、またはパッケージの使用方法に関するガイダンスを提供する必要があります。
以下に示すパッケージ形式を使用するには、既存のパッケージはほとんど必要ありません。
この形式では、最も重要視されるシナリオとしてネイティブ コンテンツを有効にします。 つまり、マネージド アセンブリは、ターゲット プラットフォームに基づいたマネージド アセンブリと一緒にバイナリの実装を配布する、ハードウェアの実装に近いかによって異なるということです。 たとえば、System.IO.Compression パッケージでは、このテクノロジを使用しています。 https://www.nuget.org/packages/System.IO.Compression
要約すると、上記の機能が絶対に必要というわけではない場合、ここで説明されている形式は NuGet 3.x 以降によってのみサポートされるので、既存のパッケージ形式と一緒にしておくことをお勧めします。
shim を使用して packages.config
と project.json
の両方のシナリオに機能するように、パッケージをビルドすることはできますが、上述の非推奨の機能ではなく、従来の方法でパッケージを構築すると簡単なことが多いです。
3.x のパッケージ形式は、NuGet 2.x を超える次のいくつかの追加機能を許可します。
コンパイルに使用される参照アセンブリとさまざまなプラットフォーム/デバイス上のランタイムに使用される実装アセンブリのセットを定義する。 この機能では、コンシューマーに一般的なセキュリティを提供しながら、プラットフォーム固有の API を利用できるようにします。 特に、中間ポータブル ライブラリの記述が簡単になります。
パッケージがプラットフォーム (例: オペレーティング システム、CPU アーキテクチャ) でピボットすることを許可する。
コンパニオン パッケージに対してプラットフォーム固有の実装の分離を許可する。
最も重要視される依存関係として、ネイティブの依存関係をサポートする。