MSBuild ターゲットとしての NuGet の pack と restoreNuGet pack and restore as MSBuild targets

NuGet 4.0 以降NuGet 4.0+

PackageReference形式では、NuGet 4.0 以降では、個別のファイルを使用するのではなく、すべてのマニフェストメタデータをプロジェクトファイル内に直接格納でき .nuspec ます。With the PackageReference format, NuGet 4.0+ can store all manifest metadata directly within a project file rather than using a separate .nuspec file.

MSBuild 15.1 以降では、NuGet は以下のように pack および restore ターゲットを使用する MSBuild の最上級のメンバーです。With MSBuild 15.1+, NuGet is also a first-class MSBuild citizen with the pack and restore targets as described below. これらのターゲットを使用すると、他の MSBuild タスクやターゲットの場合と同様に NuGet を使用できます These targets allow you to work with NuGet as you would with any other MSBuild task or target. MSBuild を使用して NuGet パッケージを作成する手順については、「 msbuild を使用した nuget パッケージの作成」を参照してください。For instructions creating a NuGet package using MSBuild, see Create a NuGet package using MSBuild. (NuGet 3.x 以前の場合は、代わりに NuGet CLI の pack および restore コマンドを使用します)。(For NuGet 3.x and earlier, you use the pack and restore commands through the NuGet CLI instead.)

ターゲットのビルド順序Target build order

packrestore は MSBuild のターゲットなので、アクセスするとワークフローを強化できます。Because pack and restore are MSBuild targets, you can access them to enhance your workflow. たとえば、パック後にパッケージをネットワーク共有にコピーするとします。For example, let’s say you want to copy your package to a network share after packing it. この場合、プロジェクト ファイルに以下を追加します。You can do that by adding the following in your project file:

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

同様に、MSBuild タスクを記述し、独自のターゲットを記述して、MSBuild タスクで NuGet プロパティを使用することができます。Similarly, you can write an MSBuild task, write your own target and consume NuGet properties in the MSBuild task.

注意

$(OutputPath) は相対であり、プロジェクトのルートからコマンドを実行していることを想定しています。$(OutputPath) is relative and expects that you are running the command from the project root.

pack ターゲットpack target

PackageReference 形式を使用する .NET Standard プロジェクトでは、を使用して、 msbuild -t:pack NuGet パッケージの作成で使用する入力をプロジェクトファイルから描画します。For .NET Standard projects using the PackageReference format, using msbuild -t:pack draws inputs from the project file to use in creating a NuGet package.

以下の表では、最初の <PropertyGroup> ノード内のプロジェクト ファイルに追加できる MSBuild のプロパティについて説明します。The table below describes the MSBuild properties that can be added to a project file within the first <PropertyGroup> node. Visual Studio 2017 以降では、プロジェクトを右クリックし、コンテキスト メニューで [{project_name} の編集] を選択して、この編集を簡単に行うことができます。You can make these edits easily in Visual Studio 2017 and later by right-clicking the project and selecting Edit {project_name} on the context menu. 便宜上、テーブルは .nuspec ファイル内の同等のプロパティによって整理されています。For convenience the table is organized by the equivalent property in a .nuspec file.

.nuspecOwners および Summary プロパティは、MSBuild ではサポートされていない点に注意してください。Note that the Owners and Summary properties from .nuspec are not supported with MSBuild.

属性/NuSpec の値Attribute/NuSpec Value MSBuild のプロパティMSBuild Property DefaultDefault メモNotes
IdId PackageIdPackageId AssemblyNameAssemblyName MSBuild の $(AssemblyName)$(AssemblyName) from MSBuild
VersionVersion PackageVersionPackageVersion VersionVersion これは semver と互換性があります (たとえば、"1.0.0"、"1.0.0-beta"、または "1.0.0-beta-00345")This is semver compatible, for example “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”
VersionPrefixVersionPrefix PackageVersionPrefixPackageVersionPrefix emptyempty PackageVersion を設定すると、PackageVersionPrefix は上書きされますSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix emptyempty MSBuild の $(VersionSuffix)$(VersionSuffix) from MSBuild. PackageVersion を設定すると、PackageVersionSuffix は上書きされますSetting PackageVersion overwrites PackageVersionSuffix
AuthorsAuthors AuthorsAuthors 現在のユーザーのユーザー名Username of the current user
所有者Owners 該当なしN/A NuSpec にはありませんNot present in NuSpec
タイトルTitle タイトルTitle PackageIdThe PackageId
説明Description 説明Description "パッケージの説明""Package Description"
CopyrightCopyright CopyrightCopyright emptyempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
licenselicense PackageLicenseExpressionPackageLicenseExpression emptyempty <license type="expression"> に対応しますCorresponds to <license type="expression">
licenselicense PackageLicenseFilePackageLicenseFile emptyempty <license type="file"> に相当します。Corresponds to <license type="file">. 参照されているライセンスファイルを明示的にパックする必要があります。You need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl emptyempty PackageLicenseUrl 非推奨です。パッケージのパッケージを使用して、パッケージのプロパティをPackageLicenseUrl is deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl emptyempty
アイコンIcon PackageIconPackageIcon emptyempty 参照されているアイコンイメージファイルを明示的にパックする必要があります。You need to explicitly pack the referenced icon image file.
IconUrlIconUrl PackageIconUrlPackageIconUrl emptyempty ベストダウンレベルのエクスペリエンスを向上させるには、 PackageIconUrl に加えてを指定する必要があり PackageIcon ます。For the best downlevel experience, PackageIconUrl should be specified in addition to PackageIcon. 長期的には PackageIconUrl 非推奨となります。Longer term, PackageIconUrl will be deprecated.
タグTags PackageTagsPackageTags emptyempty 複数のタグはセミコロン (;) で区切られます。Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes emptyempty
リポジトリ/UrlRepository/Url RepositoryUrlRepositoryUrl emptyempty ソースコードの複製または取得に使用されるリポジトリの URL。Repository URL used to clone or retrieve source code. よう https://github.com/NuGet/NuGet.Client.gitExample: https://github.com/NuGet/NuGet.Client.git
リポジトリ/種類Repository/Type RepositoryTypeRepositoryType emptyempty リポジトリの種類。Repository type. 例: gittfsExamples: git, tfs.
リポジトリ/ブランチRepository/Branch RepositoryBranchRepositoryBranch emptyempty リポジトリのブランチ情報 (オプション)。Optional repository branch information. このプロパティを含めるには、 RepositoryUrlも指定する必要があります。RepositoryUrl must also be specified for this property to be included. 例: master (NuGet 4.7.0 +)Example: master (NuGet 4.7.0+)
リポジトリ/コミットRepository/Commit RepositoryCommitRepositoryCommit emptyempty 任意のリポジトリ コミットまたは変更セット。パッケージがどのソースに対してビルドされたかを示します。Optional repository commit or changeset to indicate which source the package was built against. このプロパティを含めるには、 RepositoryUrlも指定する必要があります。RepositoryUrl must also be specified for this property to be included. 例: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 +)Example: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+)
PackageTypePackageType <PackageType>DotNetCliTool, 1.0.0.0;Dependency, 2.0.0.0</PackageType>
まとめSummary サポートされていませんNot supported

pack ターゲットの入力pack target inputs

  • IsPackableIsPackable
  • SuppressDependenciesWhenPackingSuppressDependenciesWhenPacking
  • PackageVersionPackageVersion
  • PackageIdPackageId
  • AuthorsAuthors
  • 説明Description
  • CopyrightCopyright
  • PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance
  • DevelopmentDependencyDevelopmentDependency
  • PackageLicenseExpressionPackageLicenseExpression
  • PackageLicenseFilePackageLicenseFile
  • PackageLicenseUrlPackageLicenseUrl
  • PackageProjectUrlPackageProjectUrl
  • PackageIconUrlPackageIconUrl
  • PackageReleaseNotesPackageReleaseNotes
  • PackageTagsPackageTags
  • PackageOutputPathPackageOutputPath
  • IncludeSymbolsIncludeSymbols
  • IncludeSourceIncludeSource
  • PackageTypesPackageTypes
  • IsToolIsTool
  • RepositoryUrlRepositoryUrl
  • RepositoryTypeRepositoryType
  • RepositoryBranchRepositoryBranch
  • RepositoryCommitRepositoryCommit
  • NoPackageAnalysisNoPackageAnalysis
  • MinClientVersionMinClientVersion
  • IncludeBuildOutputIncludeBuildOutput
  • IncludeContentInPackIncludeContentInPack
  • BuildOutputTargetFolderBuildOutputTargetFolder
  • ContentTargetFoldersContentTargetFolders
  • NuspecFileNuspecFile
  • NuspecBasePathNuspecBasePath
  • NuspecPropertiesNuspecProperties

pack のシナリオpack scenarios

依存関係を表示しないSuppress dependencies

生成された NuGet パッケージからパッケージの依存関係を抑制するに SuppressDependenciesWhenPacking は、をに設定します。これにより、生成された true nupkg ファイルからのすべての依存関係がスキップされます。To suppress package dependencies from generated NuGet package, set SuppressDependenciesWhenPacking to true which will allow skipping all the dependencies from generated nupkg file.

PackageIconUrlPackageIconUrl

PackageIconUrl は、新しいプロパティを優先するように非推奨とされ PackageIcon ます。PackageIconUrl will be deprecated in favor of the new PackageIcon property.

NuGet 5.3 & Visual Studio 2019 バージョン16.3 以降では、 pack パッケージメタデータでのみが指定されている場合、 NU5048 warning が発生し PackageIconUrl ます。Starting with NuGet 5.3 & Visual Studio 2019 version 16.3, pack will raise NU5048 warning if the package metadata only specifies PackageIconUrl.

PackageIconPackageIcon

ヒント

PackageIcon PackageIconUrl まだサポートしていないクライアントとソースとの下位互換性を維持するには、との両方を指定する必要があり PackageIcon ます。You should specify both PackageIcon and PackageIconUrl to maintain backward compatibility with clients and sources that do not yet support PackageIcon. Visual Studio では PackageIcon 、将来のリリースでフォルダーベースのソースからのパッケージがサポートされるようになります。Visual Studio will support PackageIcon for packages coming from a folder-based source in a future release.

アイコンイメージファイルのパッキングPacking an icon image file

アイコンイメージファイルをパッキングする場合は、パッケージ PackageIcon のルートに対して相対的なパッケージパスを指定するために、プロパティを使用する必要があります。When packing an icon image file, you need to use PackageIcon property to specify the package path, relative to the root of the package. また、ファイルがパッケージに含まれていることを確認する必要があります。In addition, you need to make sure that the file is included in the package. イメージファイルのサイズは 1 MB に制限されています。Image file size is limited to 1 MB. サポートされているファイル形式は、JPEG および PNG です。Supported file formats include JPEG and PNG. 128x128 のイメージの解像度をお勧めします。We recommend an image resolution of 128x128.

次に例を示します。For example:

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

パッケージアイコンのサンプルです。Package Icon sample.

Nuspec に相当するものについては、「 nuspec reference for icon」を参照してください。For the nuspec equivalent, take a look at nuspec reference for icon.

出力アセンブリOutput assemblies

nuget pack は拡張子 .exe.dll.xml.winmd.json、および .pri の出力ファイルをコピーします。nuget pack copies output files with extensions .exe, .dll, .xml, .winmd, .json, and .pri. コピーされる出力ファイルは、MSBuild が BuiltOutputProjectGroup ターゲットから提供するものによって変わります。The output files that are copied depend on what MSBuild provides from the BuiltOutputProjectGroup target.

出力アセンブリの出力先を制御する MSBuild プロパティが 2 つあり、プロジェクト ファイルまたはコマンド ラインで使用できます。There are two MSBuild properties that you can use in your project file or command line to control where output assemblies go:

  • IncludeBuildOutput: ビルドの出力アセンブリをパッケージに含めるかどうかを決めるブール値。IncludeBuildOutput: A boolean that determines whether the build output assemblies should be included in the package.
  • BuildOutputTargetFolder: 出力アセンブリを配置するフォルダーを指定します。BuildOutputTargetFolder: Specifies the folder in which the output assemblies should be placed. 出力アセンブリ (および他の出力ファイル) は、各フレームワーク フォルダーにコピーされます。The output assemblies (and other output files) are copied into their respective framework folders.

パッケージ参照Package references

Package References (PackageReference) in Project Files」(プロジェクト ファイルのパッケージ参照 (PackageReference)) を参照してください。See Package References in Project Files.

プロジェクト間参照Project to project references

プロジェクト間参照は、既定で NuGet パッケージ参照として見なされています。次に例を示します。Project to project references are considered by default as nuget package references, for example:

<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>

また、次のメタデータをプロジェクト参照に追加することもできます。You can also add the following metadata to your project reference:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

パッケージにコンテンツを含めるIncluding content in a package

コンテンツを含めるには、既存の <Content> 項目にメタデータを追加します。To include content, add extra metadata to the existing <Content> item. 次のようなエントリでオーバーライドしない場合、既定で "Content" という種類のすべての要素はパッケージに含まれます。By default everything of type "Content" gets included in the package unless you override with entries like the following:

<Content Include="..\win7-x64\libuv.txt">
 <Pack>false</Pack>
</Content>

次のようにパッケージ パスを指定しない場合、既定では、すべてがパッケージ内の content および contentFiles\any\<target_framework> フォルダーのルートに追加され、相対フォルダー構造が保持されます。By default, everything gets added to the root of the content and contentFiles\any\<target_framework> folder within a package and preserves the relative folder structure, unless you specify a package path:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

(content および contentFiles フォルダーの両方ではなく) すべてのコンテンツを特定のルート フォルダーにのみコピーする場合、MSBuild プロパティの ContentTargetFolders を使用できます。このプロパティの既定値は "content;contentFiles" ですが、他の任意のフォルダー名に設定できます。If you want to copy all your content to only a specific root folder(s) (instead of content and contentFiles both), you can use the MSBuild property ContentTargetFolders, which defaults to "content;contentFiles" but can be set to any other folder names. ContentTargetFolders に "contentFiles" と指定するだけで、buildAction に基づいて contentFiles\any\<target_framework> または contentFiles\<language>\<target_framework> 以下にファイルが配置されます。Note that just specifying "contentFiles" in ContentTargetFolders puts files under contentFiles\any\<target_framework> or contentFiles\<language>\<target_framework> based on buildAction.

PackagePath には、セミコロンで区切った一連のターゲット パスを指定できます。PackagePath can be a semicolon-delimited set of target paths. 空のパッケージ パスを指定すると、ファイルはパッケージのルートに追加されます。Specifying an empty package path would add the file to the root of the package. たとえば、次のように指定すると、libuv.txtcontent\myfilescontent\samples、およびパッケージ ルートに追加されます。For example, the following adds libuv.txt to content\myfiles, content\samples, and the package root:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>

また、MSBuild プロパティの $(IncludeContentInPack) もあります。既定値は true です。There is also an MSBuild property $(IncludeContentInPack), which defaults to true. これを任意のプロジェクトで false に設定すると、プロジェクトのコンテンツは NuGet パッケージに含まれません。If this is set to false on any project, then the content from that project are not included in the nuget package.

上記の任意の項目に設定できる他の pack 固有のメタデータとして、NuSpec の contentFiles エントリに CopyToOutput 値と Flatten 値を設定する <PackageCopyToOutput><PackageFlatten> があります。Other pack specific metadata that you can set on any of the above items includes <PackageCopyToOutput> and <PackageFlatten> which sets CopyToOutput and Flatten values on the contentFiles entry in the output nuspec.

注意

コンテンツ項目とは別に、<Pack><PackagePath> のメタデータは、ビルド アクション (Compile、EmbeddedResource、ApplicationDefinition、Page、Resource、SplashScreen、DesignData、DesignDataWithDesignTimeCreatableTypes、CodeAnalysisDictionary、AndroidAsset、AndroidResource、BundleResource、または None) でファイルに設定することもできます。Apart from Content items, the <Pack> and <PackagePath> metadata can also be set on files with a build action of Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource or None.

glob パターンの使用時にファイル名をパッケージ パスに付加する pack の場合、パッケージ パスの末尾にフォルダー セパレーター文字を付ける必要があります。そうしないと、パッケージ パスはファイル名を含む完全パスとして扱われます。For pack to append the filename to your package path when using globbing patterns, your package path must end with the folder separator character, otherwise the package path is treated as the full path including the file name.

IncludeSymbolsIncludeSymbols

MSBuild -t:pack -p:IncludeSymbols=true を使用すると、対応する .pdb ファイルは他の出力ファイル (.dll.exe.winmd.xml.json.pri) と共にコピーされます。When using MSBuild -t:pack -p:IncludeSymbols=true, the corresponding .pdb files are copied along with other output files (.dll, .exe, .winmd, .xml, .json, .pri). IncludeSymbols=true を設定すると、通常のパッケージシンボル パッケージが作成されます。Note that setting IncludeSymbols=true creates a regular package and a symbols package.

IncludeSourceIncludeSource

これは、ソース ファイルと .pdb ファイルの両方がコピーされる点を除き、IncludeSymbols と同じです。This is the same as IncludeSymbols, except that it copies source files along with .pdb files as well. 種類が Compile のすべてのファイルは src\<ProjectName>\ にコピーされ、結果のパッケージには相対パス フォルダー構造が保持されます。All files of type Compile are copied over to src\<ProjectName>\ preserving the relative path folder structure in the resulting package. TreatAsPackageReferencefalse に設定された任意の ProjectReference のソース ファイルも同様の結果になります。The same also happens for source files of any ProjectReference which has TreatAsPackageReference set to false.

種類が Compile のファイルがプロジェクト フォルダー以外の場所にある場合は、単に src\<ProjectName>\ に追加されます。If a file of type Compile, is outside the project folder, then it's just added to src\<ProjectName>\.

ライセンス式またはライセンスファイルのパッキングPacking a license expression or a license file

ライセンス式を使用する場合は、"パッケージの表示" プロパティを使用する必要があります。When using a license expression, the PackageLicenseExpression property should be used. ライセンス式のサンプルLicense expression sample.

<PropertyGroup>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

NuGet.org によって受け付けられるライセンス式とライセンスの詳細については、こちらを参照してください。Learn more about license expressions and licenses that are accepted by NuGet.org.

ライセンスファイルをパッキングする場合は、パッケージのルートを基準としたパッケージパスを指定するために、"パッケージの作成" プロパティを使用する必要があります。When packing a license file, you need to use PackageLicenseFile property to specify the package path, relative to the root of the package. また、ファイルがパッケージに含まれていることを確認する必要があります。In addition, you need to make sure that the file is included in the package. 次に例を示します。For example:

<PropertyGroup>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>

<ItemGroup>
    <None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>

ライセンスファイルのサンプルLicense file sample.

IsToolIsTool

MSBuild -t:pack -p:IsTool=true を使用すると、すべての出力ファイル (Output Assemblies シナリオに指定されているファイル) は、lib フォルダーではなく tools フォルダーにコピーされます。When using MSBuild -t:pack -p:IsTool=true, all output files, as specified in the Output Assemblies scenario, are copied to the tools folder instead of the lib folder. これは、.csproj ファイルに PackageType を設定して指定する DotNetCliTool とは異なります。Note that this is different from a DotNetCliTool which is specified by setting the PackageType in .csproj file.

.nuspec を使用したパックPacking using a .nuspec

通常はファイル内の すべてのプロパティ をプロジェクトファイルに含めることをお勧めし .nuspec ますが、プロジェクトを .nuspec パックするためにファイルを使用することもできます。Although it is recommended that you include all the properties that are usually in the .nuspec file in the project file instead, you can choose to use a .nuspec file to pack your project. を使用する SDK スタイル以外のプロジェクトでは PackageReference 、をインポートして、 NuGet.Build.Tasks.Pack.targets パックタスクを実行できるようにする必要があります。For a non-SDK-style project that uses PackageReference, you must import NuGet.Build.Tasks.Pack.targets so that the pack task can be executed. Nuspec ファイルをパックする前に、プロジェクトを復元する必要があります。You still need to restore the project before you can pack a nuspec file. (SDK スタイルのプロジェクトには、既定でパックターゲットが含まれています)。(An SDK-style project includes the pack targets by default.)

Nuspec をパッキングする場合、プロジェクトファイルのターゲットフレームワークは無関係であり、使用されません。The target framework of the project file is irrelevant and not used when packing a nuspec. 次の 3 つの MSBuild プロパティが .nuspec を使用したパックと関係があります。The following three MSBuild properties are relevant to packing using a .nuspec:

  1. NuspecFile: パックに使用する .nuspec ファイルの相対パスまたは絶対パス。NuspecFile: relative or absolute path to the .nuspec file being used for packing.
  2. NuspecProperties: キー=値ペアのセミコロン区切りの一覧。NuspecProperties: a semicolon-separated list of key=value pairs. MSBuild コマンドラインの解析方法に従い、複数のプロパティは -p:NuspecProperties="key1=value1;key2=value2" のように指定する必要があります。Due to the way MSBuild command-line parsing works, multiple properties must be specified as follows: -p:NuspecProperties="key1=value1;key2=value2".
  3. NuspecBasePath: .nuspec ファイルのベース パス。NuspecBasePath: Base path for the .nuspec file.

dotnet.exe を使用してプロジェクトをパックする場合は、次のようなコマンドを使用します。If using dotnet.exe to pack your project, use a command like the following:

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

MSBuild を使用してプロジェクトをパックする場合は、次のようなコマンドを使用します。If using MSBuild to pack your project, use a command like the following:

msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

dotnet.exe または msbuild を使用して nuspec をパッキングすると、既定でプロジェクトがビルドされることにも注意してください。Please note that packing a nuspec using dotnet.exe or msbuild also leads to building the project by default. これは、プロパティを dotnet.exe に渡すことによって回避できます。これは、プロジェクトファイルの --no-build 設定 <NoBuild>true</NoBuild> と共に、プロジェクトファイル内の設定に相当し <IncludeBuildOutput>false</IncludeBuildOutput> ます。This can be avoided by passing --no-build property to dotnet.exe, which is the equivalent of setting <NoBuild>true</NoBuild> in your project file, along with setting <IncludeBuildOutput>false</IncludeBuildOutput> in the project file.

Nuspec ファイルをパックする .csproj ファイルの例を次に示します。An example of a .csproj file to pack a nuspec file is:

<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>

カスタマイズされたパッケージを作成するための高度な拡張ポイントAdvanced extension points to create customized package

ターゲットには、 pack ターゲットフレームワーク固有の内部ビルドで実行される2つの拡張ポイントが用意されています。The pack target provides two extension points that run in the inner, target framework specific build. 拡張ポイントは、ターゲットフレームワーク固有のコンテンツとアセンブリをパッケージに含めることをサポートしています。The extension points support including target framework specific content and assemblies into a package:

  • TargetsForTfmSpecificBuildOutput ターゲット: フォルダー内のファイル、 lib またはを使用して指定されたフォルダー内のファイルに使用し BuildOutputTargetFolder ます。TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage ターゲット: の外部のファイルに対して使用し BuildOutputTargetFolder ます。TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

カスタムターゲットを作成し、プロパティの値として指定し $(TargetsForTfmSpecificBuildOutput) ます。Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. (既定では lib) に移動する必要があるファイルの場合、 BuildOutputTargetFolder ターゲットはこれらのファイルを ItemGroup に書き込み、 BuildOutputInPackage 次の2つのメタデータ値を設定する必要があります。For any files that need to go into the BuildOutputTargetFolder (lib by default), the target should write those files into the ItemGroup BuildOutputInPackage and set the following two metadata values:

  • FinalOutputPath: ファイルの絶対パス。指定されていない場合は、ソースパスの評価に Id が使用されます。FinalOutputPath: The absolute path of the file; if not provided, the Identity is used to evaluate source path.
  • TargetPath: (省略可能) ファイルが内のサブフォルダーに入る必要があるときに設定し lib\<TargetFramework> ます。これは、それぞれのカルチャフォルダーの下にあるサテライトアセンブリのようになります。TargetPath: (Optional) Set when the file needs to go into a subfolder within lib\<TargetFramework> , like satellite assemblies that go under their respective culture folders. 既定値は、ファイルの名前です。Defaults to the name of the file.

例:Example:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="GetMyPackageFiles">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
        <TargetPath>cs</TargetPath>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

TargetsForTfmSpecificContentInPackageTargetsForTfmSpecificContentInPackage

カスタムターゲットを作成し、プロパティの値として指定し $(TargetsForTfmSpecificContentInPackage) ます。Write a custom target and specify it as the value of the $(TargetsForTfmSpecificContentInPackage) property. パッケージに含めるファイルについては、ターゲットはこれらのファイルを ItemGroup に書き込み、 TfmSpecificPackageFile 次のオプションのメタデータを設定する必要があります。For any files to include in the package, the target should write those files into the ItemGroup TfmSpecificPackageFile and set the following optional metadata:

  • PackagePath: パッケージでファイルを出力するパス。PackagePath: Path where the file should be output in the package. 複数のファイルが同じパッケージパスに追加されると、NuGet は警告を発行します。NuGet issues a warning if more than one file is added to the same package path.
  • BuildAction: ファイルに割り当てるビルドアクション。パッケージパスがフォルダー内にある場合にのみ必要です contentFilesBuildAction: The build action to assign to the file, required only if the package path is in the contentFiles folder. 既定値は "None" です。Defaults to "None".

例:An example:

<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 ターゲットrestore target

MSBuild -t:restore (nuget restoredotnet restore が .NET Core プロジェクトで使用) は、次のようにプロジェクト ファイルで参照されるパッケージを復元します。MSBuild -t:restore (which nuget restore and dotnet restore use with .NET Core projects), restores packages referenced in the project file as follows:

  1. すべてのプロジェクト間参照を読み取りますRead all project to project references
  2. プロジェクトのプロパティを読み取って、中間フォルダーとターゲット フレームワークを検出しますRead the project properties to find the intermediate folder and target frameworks
  3. MSBuild データを NuGet.Build.Tasks.dll に渡すPass MSBuild data to NuGet.Build.Tasks.dll
  4. restore を実行しますRun restore
  5. パッケージのダウンロードDownload packages
  6. アセット ファイル、ターゲット、およびプロパティを出力しますWrite assets file, targets, and props

ターゲットは、 restore PackageReference 形式を使用するプロジェクトに対して のみ 機能します。The restore target works only for projects using the PackageReference format. 形式を使用するプロジェクトでは機能し ませんpackages.config 代わりに nuget restore を使用してください。It does not work for projects using the packages.config format; use nuget restore instead.

restore のプロパティRestore properties

追加の restore 設定を、プロジェクト ファイルの MSBuild プロパティで指定することができます。Additional restore settings may come from MSBuild properties in the project file. また、-p: スイッチを使用して、コマンド ラインから値を設定することもできます (次の例を参照してください)。Values can also be set from the command line using the -p: switch (see Examples below).

プロパティProperty 説明Description
RestoreSourcesRestoreSources パッケージ ソースのセミコロン区切りの一覧。Semicolon-delimited list of package sources.
RestorePackagesPathRestorePackagesPath ユーザー パッケージ フォルダーのパス。User packages folder path.
RestoreDisableParallelRestoreDisableParallel ダウンロード数を一度に 1 つまでに制限します。Limit downloads to one at a time.
RestoreConfigFileRestoreConfigFile 適用する Nuget.Config ファイルのパス。Path to a Nuget.Config file to apply.
RestoreNoCacheRestoreNoCache True の場合、キャッシュされたパッケージの使用を回避します。If true, avoids using cached packages. グローバルパッケージとキャッシュフォルダーの管理」を参照してください。See Managing the global packages and cache folders.
RestoreIgnoreFailedSourcesRestoreIgnoreFailedSources true の場合、失敗した、または不足しているパッケージ ソースを無視します。If true, ignores failing or missing package sources.
RestoreFallbackFoldersRestoreFallbackFolders フォールバックフォルダー。ユーザーパッケージフォルダーを使用する場合と同じ方法で使用されます。Fallback folders, used in the same way the user packages folder is used.
RestoreAdditionalProjectSourcesRestoreAdditionalProjectSources 復元中に使用する追加のソース。Additional sources to use during restore.
RestoreAdditionalProjectFallbackFoldersRestoreAdditionalProjectFallbackFolders 復元中に使用する追加のフォールバックフォルダー。Additional fallback folders to use during restore.
RestoreAdditionalProjectFallbackFoldersExcludesRestoreAdditionalProjectFallbackFoldersExcludes で指定されたフォールバックフォルダーを除外します。 RestoreAdditionalProjectFallbackFoldersExcludes fallback folders specified in RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFileRestoreTaskAssemblyFile NuGet.Build.Tasks.dll のパス。Path to NuGet.Build.Tasks.dll.
RestoreGraphProjectInputRestoreGraphProjectInput 復元するプロジェクトのセミコロン区切りの一覧。絶対パスを指定する必要があります。Semicolon-delimited list of projects to restore, which should contain absolute paths.
Restoreentkipnon存在 EnttargetsRestoreUseSkipNonexistentTargets MSBuild を使用してプロジェクトが収集されると、最適化を使用してプロジェクトを収集するかどうかが決定され SkipNonexistentTargets ます。When the projects are collected via MSBuild it determines whether they are collected using the SkipNonexistentTargets optimization. 設定しない場合、の既定値はに true なります。When not set, defaults to true. その結果、プロジェクトのターゲットをインポートできない場合のフェールファースト動作になります。The consequence is a fail-fast behavior when a project's targets cannot be imported.
MSBuildProjectExtensionsPathMSBuildProjectExtensionsPath 出力フォルダー。を既定 BaseIntermediateOutputPath として、フォルダーをにし obj ます。Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.
RestoreForceRestoreForce PackageReference ベースのプロジェクトでは、最後の復元が成功した場合でも、すべての依存関係が強制的に解決されます。In PackageReference based projects, forces all dependencies to be resolved even if the last restore was successful. このフラグを指定することは、ファイルの削除に似てい project.assets.json ます。Specifying this flag is similar to deleting the project.assets.json file. これは、http キャッシュをバイパスしません。This does not bypass the http-cache.
RestorePackagesWithLockFileRestorePackagesWithLockFile ロック ファイルの使用をオプトインします。Opts into the usage of a lock file.
RestoreLockedModeRestoreLockedMode ロックモードで復元を実行します。Run restore in locked mode. これは、restore が依存関係を再評価しないことを意味します。This means that restore will not reevaluate the dependencies.
NuGetLockFilePathNuGetLockFilePath ロックファイルのカスタムの場所。A custom location for the lock file. 既定の場所はプロジェクトの横にあり、という名前が付けられ packages.lock.json ます。The default location is next to the project and is named packages.lock.json.
RestoreForceEvaluateRestoreForceEvaluate 復元によって依存関係が再計算され、警告なしでロックファイルが更新されます。Forces restore to recompute the dependencies and update the lock file without any warning.

Examples

コマンド ライン:Command line:

msbuild -t:restore -p:RestoreConfigFile=<path>

プロジェクト ファイル:Project file:

<PropertyGroup>
    <RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>

restore の出力Restore outputs

restore で、次のファイルがビルドの obj フォルダーに作成されます。Restore creates the following files in the build obj folder:

ファイルFile 説明Description
project.assets.json すべてのパッケージ参照の依存関係グラフを含みます。Contains the dependency graph of all package references.
{projectName}.projectFileExtension.nuget.g.props パッケージに含まれる MSBuild プロパティへの参照References to MSBuild props contained in packages
{projectName}.projectFileExtension.nuget.g.targets パッケージに含まれる MSBuild ターゲットへの参照References to MSBuild targets contained in packages

1つの MSBuild コマンドを使用した復元とビルドRestoring and building with one MSBuild command

NuGet では、MSBuild のターゲットとプロパティを表示するパッケージを復元できるため、異なるグローバルプロパティを使用して復元とビルドの評価が実行されます。Due to the fact that NuGet can restore packages that bring down MSBuild targets and props, the restore and build evaluations are run with different global properties. これは、次のような場合に予期しない動作が発生する可能性があることを意味します。This means that the following will have an unpredictable and often incorrect behavior.

msbuild -t:restore,build

代わりに、推奨される方法は次のとおりです。Instead the recommended approach is:

msbuild -t:build -restore

と同様に、同じロジックが他のターゲットにも適用され build ます。The same logic applies to other targets similar to build.

PackageTargetFallbackPackageTargetFallback

PackageTargetFallback 要素では、パッケージの復元時に使用する、互換性のある一連のターゲットを指定できます。The PackageTargetFallback element allows you to specify a set of compatible targets to be used when restoring packages. dotnet TxM を使用するパッケージが、dotnet TxM を宣言していない互換性のあるパッケージと連携できるように設計されています。It's designed to allow packages that use a dotnet TxM to work with compatible packages that don't declare a dotnet TxM. つまり、プロジェクトで dotnet TxM を使用せず、依存するすべてのパッケージに dotnet TxM を与える必要がある場合、非 dotnet プラットフォームを dotnet 対応にするためにプロジェクトに <PackageTargetFallback> を追加します。That is, if your project uses the dotnet TxM, then all the packages it depends on must also have a dotnet TxM, unless you add the <PackageTargetFallback> to your project in order to allow non-dotnet platforms to be compatible with dotnet.

たとえば、プロジェクトが netstandard1.6 TxM を使用し、依存しているパッケージに lib/net45/a.dlllib/portable-net45+win81/a.dll のみが含まれている場合、そのプロジェクトはビルドできません。For example, if the project is using the netstandard1.6 TxM, and a dependent package contains only lib/net45/a.dll and lib/portable-net45+win81/a.dll, then the project will fail to build. 後者の DLL を構築する予定の場合は、portable-net45+win81 DLL に互換性を持たせるために、次のように PackageTargetFallback を追加します。If what you want to bring in is the latter DLL, then you can add a PackageTargetFallback as follows to say that the portable-net45+win81 DLL is compatible:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netstandard1.6'">
    portable-net45+win81
</PackageTargetFallback>

プロジェクト内のすべてのターゲットについてフォールバックを宣言するには、Condition 属性を省略します。To declare a fallback for all targets in your project, leave off the Condition attribute. また、次のように $(PackageTargetFallback) を含めて、既存の PackageTargetFallback を拡張することもできます。You can also extend any existing PackageTargetFallback by including $(PackageTargetFallback) as shown here:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win81
</PackageTargetFallback >

復元グラフの 1 つのライブラリを置き換えるReplacing one library from a restore graph

復元結果のアセンブリが間違っている場合は、パッケージの既定の選択を除外し、独自の選択で置き換えることができます。If a restore is bringing the wrong assembly, it's possible to exclude that packages default choice, and replace it with your own choice. まず、最上位の PackageReference ですべてのアセットを除外します。First with a top level PackageReference, exclude all assets:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

次に、DLL の適切なローカル コピーに独自の参照を追加します。Next, add your own reference to the appropriate local copy of the DLL:

<Reference Include="Newtonsoft.Json.dll" />