NuGet ターゲットとして MSBuild パックおよび復元する
NuGet 4.0+
PackageReference 形式では、4.0 以降では、NuGet別.nuspec
のファイルを使用するのではなく、すべてのマニフェスト メタデータをプロジェクト ファイル内に直接格納できます。
15.1 以降ではMSBuild、NuGet以下で説明するように、ターゲットをrestore
持つpack
一流MSBuildの市民でもあります。 これらのターゲットを使用すると、他MSBuildのNuGetタスクやターゲットと同様に操作できます。 使用してパッケージを作成するNuGet手順については、「を使用してMSBuildパッケージMSBuildを作成する」をNuGet参照してください。 (For NuGet 3.x 以前では、代わりに CLI を使用して パック コマンドと 復元 コマンドを NuGet 使用します)。
ターゲットのビルド順序
ターゲットであるため pack
restore
MSBuild 、それらにアクセスしてワークフローを強化できます。 たとえば、パッケージをパック後にネットワーク共有にコピーするとします。 この場合、プロジェクト ファイルに以下を追加します。
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy
SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
DestinationFolder="\\myshare\packageshare\"
/>
</Target>
同様に、タスクの作成、独自の MSBuild ターゲットの作成、タスクのプロパティの使用 NuGet を行 MSBuild うことができます。
注意
$(OutputPath)
は相対であり、プロジェクト ルートからコマンドを実行していることを想定しています。
pack ターゲット
形式を使用する .NET プロジェクトの PackageReference
場合は、パッケージの作成に使用 msbuild -t:pack
するプロジェクト ファイルからの入力を NuGet 描画します。
次の表では、最初<PropertyGroup>
のMSBuildノード内のプロジェクト ファイルに追加できるプロパティについて説明します。 Visual Studio 2017 以降では、プロジェクトを右クリックし、コンテキスト メニューで [{project_name} の編集] を選択して、この編集を簡単に行うことができます。 便宜上、テーブルはファイル内.nuspec
の同等のプロパティによって整理されます。
注意
Owners
および Summary
プロパティの使用 .nuspec
はサポートされていません MSBuild。
属性/nuspec 値 | MSBuild プロパティ | Default | メモ |
---|---|---|---|
Id |
PackageId |
$(AssemblyName) |
MSBuild からの $(AssemblyName) |
Version |
PackageVersion |
バージョン | これは、たとえば、semver 互換1.0.0 1.0.0-beta です。または 1.0.0-beta-00345 . 既定値は Version 設定されていない場合です。 |
VersionPrefix |
VersionPrefix |
empty | 上書きを設定 PackageVersion する VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | 上書きを設定 PackageVersion する VersionSuffix |
Authors |
Authors |
現在のユーザーのユーザー名 | nuget.org のプロファイル名と一致する、セミコロンで区切られたパッケージ作成者のリスト。これらは、nuget.org のギャラリーに表示 NuGet され、同じ作成者によるパッケージの相互参照に使用されます。 |
Owners |
該当なし | に存在しない nuspec | |
Title |
Title |
$(PackageId) |
人が読みやすいパッケージのタイトル。通常、nuget.org と、Visual Studio のパッケージ マネージャーの UI 画面で使用されます。 |
Description |
Description |
"パッケージの説明" | アセンブリの長い説明。 PackageDescription が指定されていない場合、このプロパティはパッケージの説明としても使用されます。 |
Copyright |
Copyright |
empty | パッケージの著作権の詳細。 |
RequireLicenseAcceptance |
PackageRequireLicenseAcceptance |
false |
クライアントがユーザーに対して、パッケージのインストール前にパッケージ ライセンスに同意することを必須にするかどうかを示すブール値。 |
license |
PackageLicenseExpression |
empty | <license type="expression"> に相当します。 「ライセンス式またはライセンス ファイルのパッキング」を参照してください。 |
license |
PackageLicenseFile |
empty | カスタム ライセンスまたは SPDX 識別子が割り当てられていないライセンスを使用している場合は、パッケージ内のライセンス ファイルへのパス。 参照されるライセンス ファイルを明示的にパックする必要があります。 <license type="file"> に相当します。 「ライセンス式またはライセンス ファイルのパッキング」を参照してください。 |
LicenseUrl |
PackageLicenseUrl |
empty | PackageLicenseUrl は非推奨とされます。 代わりに、PackageLicenseExpression タグまたは PackageLicenseFile タグを使用してください。 |
ProjectUrl |
PackageProjectUrl |
empty | |
Icon |
PackageIcon |
empty | パッケージ アイコンとして使用するパッケージ内の画像へのパス。 参照されているアイコン イメージ ファイルを明示的にパックする必要があります。 詳細については、「 アイコンイメージファイル と icon メタデータのパッキング」を参照してください。 |
IconUrl |
PackageIconUrl |
empty | PackageIconUrl は非推奨です PackageIcon 。 ただし、最適なダウンレベル エクスペリエンスを実現するには、次に加えて指定 PackageIconUrl する PackageIcon 必要があります。 |
Readme |
PackageReadmeFile |
empty | 参照先の readme ファイルを明示的にパックする必要があります。 |
Tags |
PackageTags |
empty | パッケージを指定するタグのセミコロン区切りの一覧。 |
ReleaseNotes |
PackageReleaseNotes |
empty | パッケージのリリース ノート。 |
Repository/Url |
RepositoryUrl |
empty | ソース コードの複製または取得に使用されるリポジトリ URL。 例: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git。 |
Repository/Type |
RepositoryType |
empty | リポジトリの種類。 例: git (既定値)、 tfs . |
Repository/Branch |
RepositoryBranch |
empty | オプションのリポジトリ ブランチ情報。 このプロパティを含めるには、RepositoryUrl も指定する必要があります。 例: master (NuGet 4.7.0 以降)。 |
Repository/Commit |
RepositoryCommit |
empty | 任意のリポジトリ コミットまたは変更セット。パッケージがどのソースに対してビルドされたかを示します。 このプロパティを含めるには、RepositoryUrl も指定する必要があります。 例: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 以降)。 |
PackageType |
<PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> |
パッケージの使用目的を示します。 パッケージの種類は、パッケージ ID と同じ形式を使用し、で ; 区切られます。 パッケージの種類は、文字列をVersion 追加, することによってバージョン管理できます。 パッケージ の種類の NuGet 設定 (NuGet 3.5.0 以降) を参照してください。 |
|
Summary |
サポートされていません |
pack ターゲットの入力
プロパティ | 説明 |
---|---|
IsPackable |
プロジェクトをパックできるかどうかを示すブール値。 既定値は true です。 |
SuppressDependenciesWhenPacking |
true 生成されたNuGetパッケージからのパッケージの依存関係を抑制するように設定します。 |
PackageVersion |
結果のパッケージのバージョンを指定します。 バージョン文字列のすべての形式を NuGet 受け入れます。 既定値は $(Version) です。つまり、プロジェクトのプロパティ Version の値です。 |
PackageId |
結果のパッケージの名前を指定します。 指定しない場合、pack 操作の既定では、AssemblyName またはディレクトリ名をパッケージ名として使用します。 |
PackageDescription |
UI 画面用のパッケージの長い説明。 |
Authors |
nuget.org のプロファイル名と一致する、セミコロンで区切られたパッケージ作成者の一覧。これらは、nuget.org の NuGet ギャラリーに表示され、同じ作成者によるパッケージの相互参照に使用されます。 |
Description |
アセンブリの長い説明。 PackageDescription が指定されていない場合、このプロパティはパッケージの説明としても使用されます。 |
Copyright |
パッケージの著作権の詳細。 |
PackageRequireLicenseAcceptance |
クライアントがユーザーに対して、パッケージのインストール前にパッケージ ライセンスに同意することを必須にするかどうかを示すブール値。 既定値は、false です。 |
DevelopmentDependency |
開発専用の依存関係としてパッケージをマークするかどうかを指定するブール値。指定すると、そのパッケージは他のパッケージに依存関係として含まれなくなります。 (NuGet4.8 以降) の場合PackageReference 、このフラグは、コンパイル時の資産がコンパイルから除外されることを意味します。 詳しくは、「DevelopmentDependency support for PackageReference (PackageReference に対する DevelopmentDependency のサポート)」をご覧ください。 |
PackageLicenseExpression |
たとえば、Apache-2.0 SPDX ライセンス識別子または式。 詳細については、「 ライセンス式またはライセンス ファイルのパッキング」を参照してください。 |
PackageLicenseFile |
カスタム ライセンスまたは SPDX 識別子が割り当てられていないライセンスを使用している場合は、パッケージ内のライセンス ファイルへのパス。 |
PackageLicenseUrl |
PackageLicenseUrl は非推奨とされます。 代わりに、PackageLicenseExpression タグまたは PackageLicenseFile タグを使用してください。 |
PackageProjectUrl |
|
PackageIcon |
パッケージのルートを基準として、パッケージ アイコンのパスを指定します。 詳細については、「 アイコン イメージ ファイルのパッキング」を参照してください。 |
PackageReleaseNotes |
パッケージのリリース ノート。 |
PackageReadmeFile |
パッケージの Readme。 |
PackageTags |
パッケージを指定するタグのセミコロン区切りの一覧。 |
PackageOutputPath |
パックされたパッケージをドロップする出力パスを指定します。 既定値は $(OutputPath) です。 |
IncludeSymbols |
このブール値は、プロジェクトをパックするときに、パッケージが追加のシンボル パッケージを作成するかどうかを指定します。 シンボル パッケージの形式は、SymbolPackageFormat プロパティで制御します。 詳細については、「 IncludeSymbols」を参照してください。 |
IncludeSource |
このブール値は、パック プロセスでソース パッケージを作成するかどうかを示します。 ソース パッケージには、ライブラリのソース コードと PDB ファイルが含まれます。 ソース ファイルは、結果のパッケージ ファイルの src/ProjectName ディレクトリに置かれます。 詳細については、「 IncludeSource」を参照してください。 |
PackageType |
|
IsTool |
すべての出力ファイルを lib フォルダーではなく tools フォルダーにコピーするかどうかを指定します。 詳細については、 IsTool を参照してください。 |
RepositoryUrl |
ソース コードの複製または取得に使用されるリポジトリ URL。 例: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git。 |
RepositoryType |
リポジトリの種類。 例: git (既定値)、 tfs . |
RepositoryBranch |
オプションのリポジトリ ブランチ情報。 このプロパティを含めるには、RepositoryUrl も指定する必要があります。 例: master (NuGet 4.7.0 以降)。 |
RepositoryCommit |
任意のリポジトリ コミットまたは変更セット。パッケージがどのソースに対してビルドされたかを示します。 このプロパティを含めるには、RepositoryUrl も指定する必要があります。 例: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 以降)。 |
SymbolPackageFormat |
シンボル パッケージの形式を指定します。 "symbols.nupkg" の場合、PDB、DLL、およびその他の出力ファイルを含む .symbols.nupkg 拡張子を使用してレガシ シンボル パッケージが作成されます。 "snupkg" の場合は、移植可能な PDB を含む snupkg シンボル パッケージが作成されます。 既定値は "symbols.nupkg" です。 |
NoPackageAnalysis |
パッケージのビルド後に pack パッケージ分析を実行しないように指定します。 |
MinClientVersion |
nuget.exeとVisual Studio パッケージ マネージャーによって適用される、このパッケージをインストールできるクライアントの最小バージョンNuGetを指定します。 |
IncludeBuildOutput |
このブール値は、ビルド出力アセンブリを .nupkg ファイルにパッケージ化するかどうかを指定します。 |
IncludeContentInPack |
このブール値は、型 Content が指定された項目が結果パッケージに自動的に含まれるかどうかを指定します。 既定では、 true です。 |
BuildOutputTargetFolder |
出力アセンブリを配置するフォルダーを指定します。 出力アセンブリ (および他の出力ファイル) は、各フレームワーク フォルダーにコピーされます。 詳細については、「 出力アセンブリ」を参照してください。 |
ContentTargetFolders |
すべてのコンテンツ ファイルが指定されていない場合 PackagePath に移動する場所の既定の場所を指定します。 既定値は "content;contentFiles" です。 詳細については、「Including content in a package」 (パッケージにコンテンツを追加する) を参照してください。 |
NuspecFile |
パッキングに使用されるファイルへの .nuspec 相対パスまたは絶対パス。 指定した場合は、情報のパッケージ化 にのみ 使用され、プロジェクト内の情報は使用されません。 詳細については、次を使用したパッキングを.nuspec参照してください。 |
NuspecBasePath |
ファイルの .nuspec 基本パス。 詳細については、次を使用したパッキングを.nuspec参照してください。 |
NuspecProperties |
キー=値ペアのセミコロン区切りの一覧。 詳細については、次を使用したパッキングを.nuspec参照してください。 |
pack のシナリオ
依存関係の抑制
生成されたパッケージからのパッケージの依存関係をtrue
抑制するには、生成された NuGet nupkg ファイルからすべての依存関係をスキップできるように設定SuppressDependenciesWhenPacking
します。
PackageIconUrl
PackageIconUrl
は、このプロパティを優先して PackageIcon
非推奨とされます。 NuGet 5.3 および Visual Studio 2019 バージョン 16.3 以降では、pack
パッケージ メタデータで指定されている場合にのみ NU5048 警告が発生しますPackageIconUrl
。
PackageIcon
ヒント
まだサポート PackageIcon
されていないクライアントとソースとの下位互換性を維持するには、両方 PackageIcon
を指定します PackageIconUrl
。 Visual Studioは、PackageIcon
フォルダー ベースのソースからのパッケージをサポートしています。
アイコン イメージ ファイルのパッキング
アイコン イメージ ファイルをパックする場合は、プロパティを使用 PackageIcon
して、パッケージのルートを基準にしてアイコン ファイルのパスを指定します。 さらに、ファイルがパッケージに含まれていることを確認します。 イメージ ファイルのサイズは 1 MB に制限されています。 サポートされているファイル形式には、JPEG と PNG が含まれます。 128 x 128 の画像解像度をお勧めします。
次に例を示します。
<PropertyGroup>
...
<PackageIcon>icon.png</PackageIcon>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="images\icon.png" Pack="true" PackagePath="\"/>
...
</ItemGroup>
これに相当するものnuspecについては、アイコンのリファレンスを参照nuspecしてください。
PackageReadmeFile
5.10.0 プレビュー 2.NET SDK 5.0.300 以降でNuGetサポートされています /
readme ファイルをパックする場合は、このプロパティを PackageReadmeFile
使用して、パッケージのルートに対する相対パスを指定する必要があります。 これに加えて、ファイルがパッケージに含まれていることを確認する必要があります。 サポートされているファイル形式には、Markdown (.md) のみが含まれます。
次に例を示します。
<PropertyGroup>
...
<PackageReadmeFile>readme.md</PackageReadmeFile>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="docs\readme.md" Pack="true" PackagePath="\"/>
...
</ItemGroup>
これに相当するものnuspecについては、readme のリファレンスを参照nuspecしてください。
出力アセンブリ
nuget pack
は拡張子 .exe
、.dll
、.xml
、.winmd
、.json
、および .pri
の出力ファイルをコピーします。 コピーされる出力ファイルは、ターゲットからのBuiltOutputProjectGroup
提供内容MSBuildによって異なります。
プロジェクト ファイルまたはコマンド ラインには、出力アセンブリの移動先を制御するために使用できるプロパティが 2 MSBuild つあります。
IncludeBuildOutput
: ビルドの出力アセンブリをパッケージに含めるかどうかを決めるブール値。BuildOutputTargetFolder
: 出力アセンブリを配置するフォルダーを指定します。 出力アセンブリ (および他の出力ファイル) は、各フレームワーク フォルダーにコピーされます。
パッケージ参照
「Package References (PackageReference) in Project Files」(プロジェクト ファイルのパッケージ参照 (PackageReference)) を参照してください。
プロジェクト間参照
プロジェクト参照へのProjectは、既定ではパッケージ参照とNuGet見なされます。 次に例を示します。
<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>
また、次のメタデータをプロジェクト参照に追加することもできます。
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
パッケージにコンテンツを含める
コンテンツを含めるには、既存の <Content>
項目にメタデータを追加します。 次のようなエントリでオーバーライドしない場合、既定で "Content" という種類のすべての要素はパッケージに含まれます。
<Content Include="..\win7-x64\libuv.txt">
<Pack>false</Pack>
</Content>
次のようにパッケージ パスを指定しない場合、既定では、すべてがパッケージ内の content
および contentFiles\any\<target_framework>
フォルダーのルートに追加され、相対フォルダー構造が保持されます。
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles\</PackagePath>
</Content>
すべてのコンテンツを (両方ではなく) 特定のcontent
contentFiles
ルート フォルダーのみにコピーする場合は、プロパティを使用MSBuildできます。このプロパティContentTargetFolders
は既定では "content;contentFiles" ですが、他のフォルダー名に設定できます。 ContentTargetFolders
に "contentFiles" と指定するだけで、buildAction
に基づいて contentFiles\any\<target_framework>
または contentFiles\<language>\<target_framework>
以下にファイルが配置されます。
PackagePath
には、セミコロンで区切った一連のターゲット パスを指定できます。 空のパッケージ パスを指定すると、ファイルはパッケージのルートに追加されます。 たとえば、次のように指定すると、libuv.txt
は content\myfiles
、content\samples
、およびパッケージ ルートに追加されます。
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
プロパティもあります MSBuild 。このプロパティ $(IncludeContentInPack)
の既定値 true
は . これを任意のプロジェクトで false
に設定すると、プロジェクトのコンテンツは NuGet パッケージに含まれません。
上記の項目のいずれかで設定できるその他のパック固有のメタデータには、<PackageFlatten>
出力のエントリのセットCopyToOutput
とFlatten
値がcontentFiles
含まれます<PackageCopyToOutput>
nuspec。
注意
コンテンツ項目とは別に、<Pack>
と <PackagePath>
のメタデータは、ビルド アクション (Compile、EmbeddedResource、ApplicationDefinition、Page、Resource、SplashScreen、DesignData、DesignDataWithDesignTimeCreatableTypes、CodeAnalysisDictionary、AndroidAsset、AndroidResource、BundleResource、または None) でファイルに設定することもできます。
glob パターンの使用時にファイル名をパッケージ パスに付加する pack の場合、パッケージ パスの末尾にフォルダー セパレーター文字を付ける必要があります。そうしないと、パッケージ パスはファイル名を含む完全パスとして扱われます。
IncludeSymbols
MSBuild -t:pack -p:IncludeSymbols=true
を使用すると、対応する .pdb
ファイルは他の出力ファイル (.dll
、.exe
、.winmd
、.xml
、.json
、.pri
) と共にコピーされます。 IncludeSymbols=true
を設定すると、通常のパッケージとシンボル パッケージが作成されます。
IncludeSource
これは、ソース ファイルと .pdb
ファイルの両方がコピーされる点を除き、IncludeSymbols
と同じです。 種類が Compile
のすべてのファイルは src\<ProjectName>\
にコピーされ、結果のパッケージには相対パス フォルダー構造が保持されます。 TreatAsPackageReference
が false
に設定された任意の ProjectReference
のソース ファイルも同様の結果になります。
種類が Compile のファイルがプロジェクト フォルダー以外の場所にある場合は、単に src\<ProjectName>\
に追加されます。
ライセンス式またはライセンス ファイルのパッキング
ライセンス式を使用する場合は、プロパティを使用します PackageLicenseExpression
。 サンプルについては、 ライセンス式のサンプルを参照してください。
<PropertyGroup>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
.org で NuGet受け入れられるライセンス式とライセンスの詳細については、 ライセンスメタデータを参照してください。
ライセンス ファイルをパッキングする場合は、プロパティを使用 PackageLicenseFile
して、パッケージのルートを基準としたパッケージ パスを指定します。 さらに、ファイルがパッケージに含まれていることを確認します。 次に例を示します。
<PropertyGroup>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>
サンプルについては、 ライセンス ファイルのサンプルを参照してください。
注意
一度に PackageLicenseExpression
指定できる 、 PackageLicenseFile
、のいずれか PackageLicenseUrl
1 つだけです。
拡張子を付けずにファイルをパッキングする
ライセンス ファイルをパッキングする場合など、一部のシナリオでは、拡張子のないファイルを含めることができます。 履歴上の理由から、 NuGet&MSBuild 拡張機能のないパスをディレクトリとして扱います。
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="LICENSE" Pack="true" PackagePath=""/>
</ItemGroup>
IsTool
MSBuild -t:pack -p:IsTool=true
を使用すると、すべての出力ファイル (Output Assemblies シナリオに指定されているファイル) は、lib
フォルダーではなく tools
フォルダーにコピーされます。 これは、.csproj
ファイルに PackageType
を設定して指定する DotNetCliTool
とは異なります。
ファイルを使用した .nuspec
パッキング
通常.nuspec
はプロジェクト ファイル内のファイルに含まれるすべてのプロパティをプロジェクト ファイルに含めることもできますが、ファイルを使用.nuspec
してプロジェクトをパックすることもできます。 SDK スタイル以外のプロジェクトを使用 PackageReference
する場合は、パック タスクを実行できるようにインポート NuGet.Build.Tasks.Pack.targets
する必要があります。 ファイルをパックする前に、プロジェクトを復元する必要があります nuspec 。 (SDK スタイルのプロジェクトには、既定でパック ターゲットが含まれています)。
プロジェクト ファイルのターゲット フレームワークは無関係であり、パッケージ化時には nuspec使用されません。 次の 3 つの MSBuild プロパティは、次を使用したパッキングに関連します .nuspec
。
NuspecFile
: パックに使用する.nuspec
ファイルの相対パスまたは絶対パス。NuspecProperties
: キー=値ペアのセミコロン区切りの一覧。 コマンド ライン解析の動作方法 MSBuild により、次-p:NuspecProperties="key1=value1;key2=value2"
のように複数のプロパティを指定する必要があります。NuspecBasePath
:.nuspec
ファイルのベース パス。
dotnet.exe
を使用してプロジェクトをパックする場合は、次のようなコマンドを使用します。
dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
MSBuild を使用してプロジェクトをパックする場合は、次のようなコマンドを使用します。
msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
dotnet.exeまたは msbuild を使用してパック nuspec すると、既定でプロジェクトがビルドされることにも注意してください。 これは、プロジェクト ファイル内の設定とプロジェクト ファイル<IncludeBuildOutput>false</IncludeBuildOutput>
の設定<NoBuild>true</NoBuild>
と同じプロパティをdotnet.exeに渡--no-build
すことによって回避できます。
ファイルをパックする .csproj ファイルの例を nuspec 次に示します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<NoBuild>true</NoBuild>
<IncludeBuildOutput>false</IncludeBuildOutput>
<NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
<NuspecProperties>add nuspec properties here</NuspecProperties>
<NuspecBasePath>optional to provide</NuspecBasePath>
</PropertyGroup>
</Project>
カスタマイズされたパッケージを作成するための高度な拡張ポイント
ターゲットには pack
、内部のターゲット フレームワーク固有のビルドで実行される 2 つの拡張ポイントが用意されています。 拡張ポイントは、ターゲット フレームワーク固有のコンテンツとアセンブリをパッケージに含めてサポートします。
TargetsForTfmSpecificBuildOutput
target: フォルダー内のlib
ファイルまたは指定したフォルダーに使用しますBuildOutputTargetFolder
。TargetsForTfmSpecificContentInPackage
target: 外部のファイルに使用しますBuildOutputTargetFolder
。
TargetsForTfmSpecificBuildOutput
カスタム ターゲットを記述し、プロパティの $(TargetsForTfmSpecificBuildOutput)
値として指定します。 (既定では lib) に入 BuildOutputTargetFolder
る必要があるファイルの場合、ターゲットはこれらのファイルを ItemGroup BuildOutputInPackage
に書き込み、次の 2 つのメタデータ値を設定する必要があります。
FinalOutputPath
: ファイルの絶対パス。指定されていない場合は、ID を使用してソース パスを評価します。TargetPath
: (省略可能) ファイルが、それぞれのカルチャ フォルダーの下にあるサテライト アセンブリのように、ファイル内lib\<TargetFramework>
のサブフォルダーに移動する必要がある場合に設定します。 既定値はファイルの名前です。
例:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
<TargetPath>cs</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
TargetsForTfmSpecificContentInPackage
カスタム ターゲットを記述し、プロパティの $(TargetsForTfmSpecificContentInPackage)
値として指定します。 パッケージに含めるファイルがある場合、ターゲットはこれらのファイルを ItemGroup TfmSpecificPackageFile
に書き込み、次の省略可能なメタデータを設定する必要があります。
PackagePath
: ファイルをパッケージに出力するパス。 NuGet は、同じパッケージ パスに複数のファイルが追加された場合に警告を発行します。BuildAction
: ファイルに割り当てるビルド アクション。パッケージ パスがフォルダー内にあるcontentFiles
場合にのみ必要です。 既定値は "None" です。
例:
<PropertyGroup>
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>
<Target Name="CustomContentTarget">
<ItemGroup>
<TfmSpecificPackageFile Include="abc.txt">
<PackagePath>mycontent/$(TargetFramework)</PackagePath>
</TfmSpecificPackageFile>
<TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
<PackagePath>net46content</PackagePath>
</TfmSpecificPackageFile>
</ItemGroup>
</Target>
restore ターゲット
MSBuild -t:restore
(nuget restore
と dotnet restore
が .NET Core プロジェクトで使用) は、次のようにプロジェクト ファイルで参照されるパッケージを復元します。
- すべてのプロジェクト間参照を読み取ります
- プロジェクトのプロパティを読み取って、中間フォルダーとターゲット フレームワークを検出します
- .Build.Tasks.dll にデータをNuGet渡すMSBuild
- restore を実行します
- パッケージのダウンロード
- アセット ファイル、ターゲット、およびプロパティを出力します
ターゲットは restore
PackageReference 形式を使用するプロジェクトに対して機能します。
MSBuild 16.5+
には、この形式のオプトイン サポートpackages.config
もあります。
注意
ターゲットはrestore
、ターゲットとbuild
組み合わせて実行しないでください。
restore のプロパティ
追加の復元設定は、プロジェクト ファイルのプロパティから MSBuild 取得される場合があります。 また、-p:
スイッチを使用して、コマンド ラインから値を設定することもできます (次の例を参照してください)。
プロパティ | 説明 |
---|---|
RestoreSources |
パッケージ ソースのセミコロン区切りの一覧。 |
RestorePackagesPath |
ユーザー パッケージ フォルダーのパス。 |
RestoreDisableParallel |
ダウンロード数を一度に 1 つまでに制限します。 |
RestoreConfigFile |
適用する Nuget.Config ファイルのパス。 |
RestoreNoCache |
true の場合は、キャッシュされたパッケージの使用を回避します。 グローバル パッケージとキャッシュ フォルダーの管理を参照してください。 |
RestoreIgnoreFailedSources |
true の場合、失敗した、または不足しているパッケージ ソースを無視します。 |
RestoreFallbackFolders |
フォールバック フォルダー。ユーザー パッケージ フォルダーが使用されるのと同じ方法で使用されます。 |
RestoreAdditionalProjectSources |
復元中に使用する追加のソース。 |
RestoreAdditionalProjectFallbackFolders |
復元時に使用する追加のフォールバック フォルダー。 |
RestoreAdditionalProjectFallbackFoldersExcludes |
で指定されたフォールバック フォルダーを除外します RestoreAdditionalProjectFallbackFolders |
RestoreTaskAssemblyFile |
NuGet.Build.Tasks.dll のパス。 |
RestoreGraphProjectInput |
復元するプロジェクトのセミコロン区切りの一覧。絶対パスを指定する必要があります。 |
RestoreUseSkipNonexistentTargets |
プロジェクトを使用して MSBuild 収集すると、最適化を使用して SkipNonexistentTargets 収集されるかどうかを決定します。 設定しない場合、既定値は true . その結果、プロジェクトのターゲットをインポートできない場合のフェイルファスト動作になります。 |
MSBuildProjectExtensionsPath |
出力フォルダー。既定の BaseIntermediateOutputPath フォルダーと obj フォルダー。 |
RestoreForce |
PackageReference ベースのプロジェクトでは、最後の復元が成功した場合でも、すべての依存関係を強制的に解決します。 このフラグを指定することは、ファイルの削除に project.assets.json 似ています。 これは http キャッシュをバイパスしません。 |
RestorePackagesWithLockFile |
ロック ファイルの使用をオプトインします。 |
RestoreLockedMode |
ロックモードで復元を実行します。 これは、復元によって依存関係が再評価されないことを意味します。 |
NuGetLockFilePath |
ロック ファイルのカスタムの場所。 既定の場所はプロジェクトの横にあり、名前が付けられています packages.lock.json 。 |
RestoreForceEvaluate |
復元を強制して依存関係を再計算し、警告なしでロック ファイルを更新します。 |
RestorePackagesConfig |
packages.configを使用してプロジェクトを復元するオプトイン スイッチ。サポートのみ。MSBuild -t:restore |
RestoreRepositoryPath |
packages.configのみ。 パッケージを復元するパッケージ ディレクトリを指定します。 SolutionDirectory が指定されていない場合は使用されます。 |
RestoreUseStaticGraphEvaluation |
標準評価の代わりに静的グラフ MSBuild 評価を使用するオプトイン スイッチ。 静的グラフ評価は、大規模なリポジトリとソリューションに対して大幅に高速な実験機能です。 |
このExcludeRestorePackageImports
プロパティは、.NuGet
どの MSBuild ファイルでも変更または設定しないでください。
例
コマンド ライン:
msbuild -t:restore -p:RestoreConfigFile=<path>
プロジェクト ファイル:
<PropertyGroup>
<RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>
restore の出力
restore で、次のファイルがビルドの obj
フォルダーに作成されます。
ファイル | 説明 |
---|---|
project.assets.json |
すべてのパッケージ参照の依存関係グラフが含まれています。 |
{projectName}.projectFileExtension.nuget.g.props |
パッケージに MSBuild 含まれる prop への参照 |
{projectName}.projectFileExtension.nuget.g.targets |
パッケージに含まれるターゲットへの MSBuild 参照 |
1 つの MSBuild コマンドを使用した復元とビルド
ターゲットとプロパティを NuGet ダウン MSBuild させるパッケージを復元できるため、復元とビルドの評価は異なるグローバル プロパティで実行されます。 これは、次の動作が予測不可能で、多くの場合、正しくない動作が発生することを意味します。
msbuild -t:restore,build
代わりに、推奨される方法は次のとおりです。
msbuild -t:build -restore
同様の他のターゲットにも同じロジックが build
適用されます。
PackageReference および packages.config プロジェクトの復元 MSBuild
16.5 以降では MSBuild 、packages.configもサポートされます msbuild -t:restore
。
msbuild -t:restore -p:RestorePackagesConfig=true
注意
packages.config
復元は、⿇〘 MSBuild 16.5+
〘でのみ使用でき、 dotnet.exe
静的グラフ評価を使用した MSBuild 復元
注意
16.6 以降では MSBuild 、コマンド ラインから静的グラフ評価を使用する試験的な機能が追加され、 NuGet 大規模なリポジトリの復元時間が大幅に短縮されました。
msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true
または、Directory.Build.Props でプロパティを設定して有効にすることもできます。
<Project>
<PropertyGroup>
<RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
</PropertyGroup>
</Project>
注意
Visual Studio 2019.x および NuGet 5.x の時点では、この機能は試験段階とオプトインと見なされます。 この機能が既定で有効になるタイミングの詳細については、/Home#9803 に従ってくださいNuGet。
静的グラフの復元では、復元の msbuild 部分、プロジェクトの読み取りと評価が変更されますが、復元アルゴリズムは変更されません。 復元アルゴリズムは、すべてのNuGetツール (NuGet.exe、.exe、 MSBuild dotnet.exe、Visual Studio) で同じです。
ごく少数のシナリオでは、静的グラフの復元の動作が現在の復元とは異なる場合があり、特定の宣言された PackageReferences または ProjectReference が見つからない可能性があります。
簡単にするために、1 回のチェックとして、静的グラフの復元に移行する場合は、次の実行を検討してください。
msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore
NuGet 変更を報告 しないでください 。 不一致が表示される場合は、/Home でNuGet問題を提出してください。
復元グラフの 1 つのライブラリを置き換える
復元結果のアセンブリが間違っている場合は、パッケージの既定の選択を除外し、独自の選択で置き換えることができます。 まず、最上位の PackageReference
ですべてのアセットを除外します。
<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
<ExcludeAssets>All</ExcludeAssets>
</PackageReference>
次に、DLL の適切なローカル コピーに独自の参照を追加します。
<Reference Include="Newtonsoft.Json.dll" />