パッケージの 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>.targetsbuild/<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 などがあります。