従来のアセンブリに加えて、NuGet パッケージは、そのパッケージを使用するプロジェクトにカスタム ビルド ターゲットまたはプロパティを追加することがあります。
これは、有効な MSBuild ファイルを <package_id>.targets 形式で追加するか、プロジェクトのビルド フォルダー内に <package_id>.props ( Contoso.Utility.UsefulStuff.targets など) を追加することで実現できます。
フォルダーをビルドする
NuGet が進化するにつれて、ビルド .props と .targets のさまざまなフォルダーが追加されました。
| フォルダー | NuGet バージョン | Use |
|---|---|---|
| ビルド | 2.5+ | プロジェクトのすべてのフレームワークのロジックを構築します。 |
| buildMultiTargeting | 4.0+ | 複数のフレームワークを対象とするプロジェクトの outer build のロジックを構築します。 PackageReference のみ。 |
| buildTransitive | 5.0+ | 消費プロジェクトに対して推移的に流れる資産のロジックを構築します。 機能に関するページをご覧ください。 PackageReference のみ。 |
フレームワーク固有のビルド フォルダー
3 つすべてのビルド フォルダーは、プロジェクト ターゲット フレームワークに基づいて最適なファイルを決定するために同じパターンに従います。
ルート ビルド フォルダー、 build/<package_id>.targets 、 build/<package_id>.props 内のファイルは、すべてのターゲット フレームワークに適しているとみなされます。
フレームワーク固有のファイルを提供するには、まず、次のような適切なサブフォルダー内に配置します。
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
パッケージでサポートされていない可能性があるプロジェクトでの誤検知のインストールを避けるために、必要に応じてフレームワーク固有のビルド フォルダーを使用することをお勧めします。
パッケージにlibフォルダーまたはrefフォルダーにファイルが含まれておらず、フレームワーク固有のビルドフォルダーにのみファイルがある場合、そのパッケージはすべてのプロジェクトと互換性があると見なされることに注意してください。 最新バージョンのパック ツールでは、そのようなパッケージが作成されたときに NU5127 警告を発生させます。
ビルドファイルを使用してパッケージを利用するプロジェクト
PackageReference プロジェクト
.props
.targetsはプロジェクト ファイルに追加されませんが、代わりに{projectName}.nuget.g.targetsと{projectName}.nuget.g.propsを通じて使用できます。 これらのファイルは、復元の実行時に自動的に生成されます。
プロジェクトが複数のフレームワークを対象としている場合、これらのファイルへのインポートはターゲット フレームワーク名に基づいて条件付けされます。
マルチフレームワーク ターゲット用の MSBuild .props ファイルと .targets ファイルは、 \buildMultiTargeting フォルダーに配置できます。
インポートが生成されると、MSBuild プロパティ $(TargetFramework) が空であるという条件が設定されます。
packages.config プロジェクト
NuGet は、\build ファイルを含むパッケージをインストールすると、<Import>ファイルと.targets ファイルを指す MSBuild .props要素をプロジェクト ファイルに追加します。 (.props はプロジェクト ファイルの先頭に追加され、 .targets は下部に追加されます)。ターゲット フレームワークごとに個別の条件付き MSBuild <Import> 要素が追加されます。
MSBuild のプロパティとターゲットを使用したパッケージの作成
次のいずれかのツールを使用して、パッケージに MSBuild .props と .targets を含めることができます。
MSBuild のプロパティとターゲットのコンテンツに関するガイダンス
NuGet では、パッケージ作成者とターゲット プロジェクト自体のニーズによって異なるため、 .props と .targets の作成方法は制限されません。
パッケージの .props と .targetsで行ってはいけません。たとえば、復元に影響を与えるプロパティや項目を指定しない場合は、自動的に除外されるためです。
追加または更新してはならないプロパティの例としては、TargetFramework、TargetFrameworkMoniker、TargetPlatformMoniker、AssetTargetFallback などがあります。
追加または更新してはならない項目の例としては、PackageReference、PackageVersion、PackageDownload などがあります。