パッケージの MSBuild .prop と .target
NuGet パッケージは、より従来型のアセンブリに加えて、そのパッケージを使用するプロジェクトにカスタム ビルド ターゲットまたはプロパティを追加することがあります。
これは、有効な MSBuild ファイルを、プロジェクトのビルド フォルダー内のフォーム <package_id>.targets
または <package_id>.props
(Contoso.Utility.UsefulStuff.targets
など) に追加することで実現できます。
ビルドのフォルダー
NuGet が進化するにつれて、ビルド .props
および .targets
にさまざまなフォルダーが追加されました。
フォルダー | NuGet のバージョン | 用途 |
---|---|---|
build | 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
ファイルを使用してパッケージをインストールすると、.targets
ファイルと .props
ファイルを指す MSBuild <Import>
要素がプロジェクト ファイルに追加されます。 (.props
ファイルはプロジェクト ファイルの先頭に、.targets
ファイルは一番下に追加されます)。個別の条件つき MSBuild <Import>
要素はターゲット フレームワークごとに追加されます。
MSBuild のプロパティとターゲットを使用したパッケージの作成
次のいずれかのツールを使用して、パッケージに MSBuild .props
と .targets
を含めることができます。
MSBuild のプロパティとターゲットのコンテンツに関するガイダンス
NuGet では、.props
と .targets
の作成方法はパッケージ作成者とターゲット プロジェクト自体のニーズによって異なるため、制限されません。
パッケージの .props
と.targets
で行ってはならないことがいくつかあります。たとえば、復元に影響するプロパティや項目を指定しないなどです。これらは自動的に除外されます。
追加または更新してはならないプロパティの例としては、TargetFramework、TargetFrameworkMoniker、TargetPlatformMoniker、AssetTargetFallback などがあります。
追加または更新してはならない項目の例としては、PackageReference、PackageVersion、PackageDownload などがあります。