.NET Core の csproj 形式に追加されたものAdditions to the csproj format for .NET Core

ここでは、project.json から csproj および MSBuild への移行に伴ってプロジェクト ファイルに追加された変更について説明します。This document outlines the changes that were added to the project files as part of the move from project.json to csproj and MSBuild. 一般的なプロジェクト ファイルの構文とリファレンスの詳細については、MSBuild プロジェクト ファイルのドキュメントを参照してください。For more information about general project file syntax and reference, see the MSBuild project file documentation.

暗黙的なパッケージ参照Implicit package references

メタパッケージは、プロジェクト ファイルの <TargetFramework> または <TargetFrameworks> プロパティに指定されている対象フレームワークに基づいて暗黙的に参照されています。Metapackages are implicitly referenced based on the target framework(s) specified in the <TargetFramework> or <TargetFrameworks> property of your project file. <TargetFramework> を指定すると、順序に関係なく <TargetFrameworks> は無視されます。<TargetFrameworks> is ignored if <TargetFramework> is specified, independent of order. 詳しくは、「パッケージ、メタパッケージ、フレームワーク」をご覧ください。For more information, see Packages, metapackages and frameworks.



Microsoft.NETCore.App または NETStandard.Library メタパッケージは暗黙的に参照されるので、ベスト プラクティスとして以下が推奨されます。Since Microsoft.NETCore.App or NETStandard.Library metapackages are implicitly referenced, the following are our recommended best practices:

  • .NET Core または .NET Standard を対象とするとき、プロジェクト ファイルの <PackageReference> アイテム経由で Microsoft.NETCore.App または NETStandard.Library メタパッケージを明示的に参照しないようにします。When targeting .NET Core or .NET Standard, never have an explicit reference to the Microsoft.NETCore.App or NETStandard.Library metapackages via a <PackageReference> item in your project file.
  • .NET Core を対象にするとき、特定バージョンのランタイムが必要な場合、メタパッケージを参照するのではなく、プロジェクト内で <RuntimeFrameworkVersion> プロパティを使用します (1.0.4 など)。If you need a specific version of the runtime when targeting .NET Core, you should use the <RuntimeFrameworkVersion> property in your project (for example, 1.0.4) instead of referencing the metapackage.
    • 自己完結型の展開を使用し、特定のパッチ バージョンの 1.0.0 LTS ランタイムが必要な場合などにこの問題が発生する可能性があります。This might happen if you are using self-contained deployments and you need a specific patch version of 1.0.0 LTS runtime, for example.
  • .NET Standard を対象にするとき、特定バージョンの NETStandard.Library メタパッケージが必要な場合、<NetStandardImplicitPackageVersion> プロパティを使用し、必要なバージョンを設定できます。If you need a specific version of the NETStandard.Library metapackage when targeting .NET Standard, you can use the <NetStandardImplicitPackageVersion> property and set the version you need.
  • .NET Framework プロジェクトでは、Microsoft.NETCore.App または NETStandard.Library メタパッケージに参照を明示的に追加したり、更新したりしないでください。Don't explicitly add or update references to either the Microsoft.NETCore.App or NETStandard.Library metapackage in .NET Framework projects. .NET Standard ベースの NuGet パッケージを使用するとき、何らかのバージョンの NETStandard.Library が必要であれば、NuGet はそのバージョンを自動的にインストールします。If any version of NETStandard.Library is needed when using a .NET Standard-based NuGet package, NuGet automatically installs that version.

一部のパッケージ参照に対する暗黙的なバージョンImplicit version for some package references

<PackageReference> を使用するほとんどの場合に、Version 属性を設定して、使用する NuGet パッケージのバージョンを指定する必要があります。Most usages of <PackageReference> require setting the Version attribute to specify the NuGet package version to be used. ただし、.NET Core 2.1 または 2.2 を使用し、Microsoft.AspNetCore.App または Microsoft.AspNetCore.All を参照するときは、その属性は必要ありません。When using .NET Core 2.1 or 2.2 and referencing Microsoft.AspNetCore.App or Microsoft.AspNetCore.All, however, the attribute is unnecessary. .NET Core SDK では、使用する必要があるこれらのパッケージのバージョンを自動的に選択できます。The .NET Core SDK can automatically select the version of these packages that should be used.


Microsoft.AspNetCore.App または Microsoft.AspNetCore.All パッケージを参照するときは、それらのバージョンを指定しないでください。When referencing the Microsoft.AspNetCore.App or Microsoft.AspNetCore.All packages, do not specify their version. バージョンを指定すると、SDK で警告 NETSDK1071 が発生する可能性があります。If a version is specified, the SDK may produce warning NETSDK1071. この警告を解決するには、次の例のようなパッケージのバージョンを削除します。To fix this warning, remove the package version like in the following example:

  <PackageReference Include="Microsoft.AspNetCore.App" />

既知の問題: .NET Core 2.1 SDK では、プロジェクトでも Microsoft.NET.Sdk.Web が使用されている場合にのみ、この構文がサポートされます。Known issue: the .NET Core 2.1 SDK only supported this syntax when the project also uses Microsoft.NET.Sdk.Web. これは、.NET Core 2.2 SDK で解決されます。This is resolved in the .NET Core 2.2 SDK.

ASP.NET Core メタパッケージに対するこれらの参照では、ほとんどの通常の NuGet パッケージとは動作が若干異なります。These references to ASP.NET Core metapackages have a slightly different behavior from most normal NuGet packages. これらのメタパッケージを使用するアプリケーションのフレームワーク依存の展開では、ASP.NET Core 共有フレームワークが自動的に利用されます。Framework-dependent deployments of applications that use these metapackages automatically take advantage of the ASP.NET Core shared framework. メタパッケージを使用する場合、参照される ASP.NET Core NuGet パッケージの資産は、アプリケーションと共に展開されません。ASP.NET Core 共有フレームワークにはこれらの資産が含まれています。When you use the metapackages, no assets from the referenced ASP.NET Core NuGet packages are deployed with the application—the ASP.NET Core shared framework contains these assets. 共有フレームワーク内の資産は、アプリケーションの起動時間を向上させるため、ターゲット プラットフォームに対して最適化されています。The assets in the shared framework are optimized for the target platform to improve application startup time. 共有フレームワークについて詳しくは、「.NET Core の配布パッケージ」をご覧ください。For more information about shared framework, see .NET Core distribution packaging.

バージョンを "指定する" と、フレームワーク依存の展開では ASP.NET Core の共有フレームワークの "最小" バージョンとして扱われ、自己完結型の展開では "厳密な" バージョンとして扱われます。If a version is specified, it's treated as the minimum version of ASP.NET Core shared framework for framework-dependent deployments and as an exact version for self-contained deployments. これには、次のような影響があります。This can have the following consequences:

  • サーバーにインストールされている ASP.NET Core のバージョンが、PackageReference で指定されているバージョンより小さい場合、.NET Core プロセスの起動は失敗します。If the version of ASP.NET Core installed on the server is less than the version specified on the PackageReference, the .NET Core process fails to launch. Azure などのホスティング環境でメタパッケージの更新プログラムが使用できるようになる前に、NuGet.org で更新プログラムが利用可能になることがよくあります。Updates to the metapackage are often available on NuGet.org before updates have been made available in hosting environments such as Azure. PackageReference でのバージョンを ASP.NET Core に更新すると、展開されているアプリケーションが失敗する可能性があります。Updating the version on the PackageReference to ASP.NET Core could cause a deployed application to fail.
  • アプリケーションが自己完結型の展開として展開されている場合、アプリケーションに .NET Core の最新のセキュリティ更新プログラムが含まれていない可能性があります。If the application is deployed as a self-contained deployment, the application may not contain the latest security updates to .NET Core. バージョンを指定しないと、SDK は自己完結型の展開に ASP.NET Core の最新バージョンを自動的に含めることができます。When a version isn't specified, the SDK can automatically include the newest version of ASP.NET Core in the self-contained deployment.

.NET Core プロジェクトの既定のコンパイルの includeDefault compilation includes in .NET Core projects

最新バージョンの SDK の csproj 形式に移行すると共に、コンパイル項目と、SDK プロパティ ファイルに埋め込みリソースの既定の include と exclude を SDK プロパティ ファイルに移行しました。With the move to the csproj format in the latest SDK versions, we've moved the default includes and excludes for compile items and embedded resources to the SDK properties files. つまり、これらの項目をプロジェクト ファイルに指定する必要はなくなりました。This means that you no longer need to specify these items in your project file.

これを行う主な理由は、プロジェクト ファイルを見やすくするためです。The main reason for doing this is to reduce the clutter in your project file. SDK の既定値は、最も一般的な使用例に対応しているので、作成するプロジェクトごとに繰り返す必要はありません。The defaults that are present in the SDK should cover most common use cases, so there is no need to repeat them in every project that you create. その結果、プロジェクト ファイルが小さくなり、わかりやすく、編集が必要な場合に編集しやすくなります。This leads to smaller project files that are much easier to understand as well as edit by hand, if needed.

次の表は、SDK に含まれる、および除外される要素と glob の一覧です。The following table shows which element and which globs are both included and excluded in the SDK:

要素Element 含まれる globInclude glob 除外される globExclude glob glob の削除Remove glob
CompileCompile **/*.cs (または他の言語拡張機能)**/*.cs (or other language extensions) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/AN/A
EmbeddedResourceEmbeddedResource **/*.resx**/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/AN/A
NoneNone **/* **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx**/*.cs; **/*.resx


除外される glob では、./bin./obj フォルダーが常に除外されます。これらはそれぞれ MSBuild プロパティ $(BaseOutputPath)$(BaseIntermediateOutputPath) で表されます。Exclude glob always excludes the ./bin and ./obj folders, which are represented by the $(BaseOutputPath) and $(BaseIntermediateOutputPath) MSBuild properties, respectively. 全体として、すべての除外は $(DefaultItemExcludes) で表されます。As a whole, all excludes are represented by $(DefaultItemExcludes).

プロジェクトに glob があり、最新の SDK を使用してビルドしようとすると、次のエラーが発生します。If you have globs in your project and you try to build it using the newest SDK, you'll get the following error:

重複するコンパイル項目が含まれていました。Duplicate Compile items were included. .NET SDK には、既定でプロジェクト ディレクトリのコンパイル項目が含まれています。The .NET SDK includes Compile items from your project directory by default. これらの項目をプロジェクト ファイルから削除するか、プロジェクト ファイルに明示的に含める場合は 'EnableDefaultCompileItems' プロパティを 'false' に設定することができます。You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file.

このエラーを回避するには、前の表にあるものと一致する明示的な Compile 項目を削除するか、次のように <EnableDefaultCompileItems> プロパティを false に設定します。In order to get around this error, you can either remove the explicit Compile items that match the ones listed on the previous table, or you can set the <EnableDefaultCompileItems> property to false, like this:


このプロパティを false に設定すると、暗黙的に含める動作が無効になり、以前の SDK の動作に戻り、プロジェクトに既定の glob が指定されます。Setting this property to false will disable implicit inclusion, reverting to the behavior of previous SDKs where you had to specify the default globs in your project.

この変更で、他の include の主なしくみは変わりません。This change does not modify the main mechanics of other includes. ただし、たとえばアプリで発行する一部のファイルを指定する場合は、csproj で既知のしくみ (たとえば <Content> 要素) を使用することができます。However, if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in csproj for that (for example, the <Content> element).

<EnableDefaultCompileItems>Compile glob のみを無効にし、*.cs 項目にも適用される暗黙的 None glob など、他の Glob には影響しません。<EnableDefaultCompileItems> only disables Compile globs but doesn't affect other globs, like the implicit None glob, which also applies to *.cs items. そのため、ソリューション エクスプローラーは *.cs 項目を None 項目として含まれた、プロジェクトの一部として引き続き表示します。Because of that, Solution Explorer will continue show *.cs items as part of the project, included as None items. 同様に、次のように <EnableDefaultNoneItems> を false に設定し、暗黙的 None glob を無効にできます。In a similar way, you can set <EnableDefaultNoneItems> to false to disable the implicit None glob, like this:


暗黙的 glob をすべて無効にするには、<EnableDefaultItems> プロパティを false に設定します。次の例をご覧ください。To disable all implicit globs, you can set the <EnableDefaultItems> property to false as in the following example:


MSBuild と同じようにプロジェクト全体を表示する方法How to see the whole project as MSBuild sees it

これらの csproj 変更でプロジェクト ファイルが大幅に簡素化されますが、SDK とそのターゲットが追加されたとき、MSBuild と同様にプロジェクト全体を表示すると便利なことがあります。While those csproj changes greatly simplify project files, you might want to see the fully expanded project as MSBuild sees it once the SDK and its targets are included. dotnet msbuild コマンドの /pp スイッチでプロジェクトを事前処理します。インポートされるファイル、そのソース、ビルドに対するその貢献が、実際にプロジェクトをビルドすることなく、表示されます。Preprocess the project with the /pp switch of the dotnet msbuild command, which shows which files are imported, their sources, and their contributions to the build without actually building the project:

dotnet msbuild -pp:fullproject.xml

プロジェクトにターゲット フレームワークが複数存在する場合、MSBuild プロパティとして指定し、1 つだけにコマンドの結果を集中させてください。If the project has multiple target frameworks, the results of the command should be focused on only one of them by specifying it as an MSBuild property:

dotnet msbuild -p:TargetFramework=netcoreapp2.0 -pp:fullproject.xml


SDK 属性Sdk attribute

.csproj ファイルのルート <Project> 要素には、Sdk という新しい属性があります。The root <Project> element of the .csproj file has a new attribute called Sdk. Sdk は、プロジェクトで使用される SDK を指定します。Sdk specifies which SDK will be used by the project. レイヤー化のドキュメントで説明されているように、SDK は、.NET Core コードをビルドできる MSBuild タスクおよびターゲットのセットです。The SDK, as the layering document describes, is a set of MSBuild tasks and targets that can build .NET Core code. .NET Core では、次の SDK を利用できます。The following SDKs are available for .NET Core:

  1. ID が Microsoft.NET.Sdk の .NET Core SDKThe .NET Core SDK with the ID of Microsoft.NET.Sdk
  2. ID が Microsoft.NET.Sdk.Web の .NET Core Web SDKThe .NET Core web SDK with the ID of Microsoft.NET.Sdk.Web
  3. ID が Microsoft.NET.Sdk.Razor の .NET Core Razor クラス ライブラリ SDKThe .NET Core Razor Class Library SDK with the ID of Microsoft.NET.Sdk.Razor
  4. ID が Microsoft.NET.Sdk.Worker の .NET Core Worker Service (.NET Core 3.0 以降)The .NET Core Worker Service with the ID of Microsoft.NET.Sdk.Worker (since .NET Core 3.0)
  5. ID が Microsoft.NET.Sdk.WindowsDesktop の .NET Core WinForms および WPF (.NET Core 3.0 以降)The .NET Core WinForms and WPF with the ID of Microsoft.NET.Sdk.WindowsDesktop (since .NET Core 3.0)

.NET Core ツールを使用し、コードをビルドするには、Sdk 属性を <Project> 要素の ID のいずれかに設定する必要があります。You need to have the Sdk attribute set to one of those IDs on the <Project> element in order to use the .NET Core tools and build your code.


<PackageReference> 項目要素では、プロジェクトでの NuGet の依存関係を指定します。A <PackageReference> item element specifies a NuGet dependency in the project. Include 属性は、パッケージ ID を指定します。The Include attribute specifies the package ID.

<PackageReference Include="<package-id>" Version="" PrivateAssets="" IncludeAssets="" ExcludeAssets="" />


必須の Version 属性では、復元するパッケージのバージョンを指定します。The required Version attribute specifies the version of the package to restore. この属性は、NuGet バージョン管理スキームの規則に従います。The attribute respects the rules of the NuGet versioning scheme. 既定の動作では、バージョンを正確に一致させます。The default behavior is an exact version match. たとえば、Version="1.2.3" を指定すると、パッケージのバージョンが正確に 1.2.3 であることを表す NuGet 表記の [1.2.3] と同じになります。For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3] for the exact 1.2.3 version of the package.

IncludeAssets、ExcludeAssets、PrivateAssetsIncludeAssets, ExcludeAssets and PrivateAssets

IncludeAssets 属性は、<PackageReference> で指定されているパッケージに属するアセットのうち、使う必要があるものを指定します。IncludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed. 既定では、パッケージのすべてのアセットが含まれます。By default, all package assets are included.

ExcludeAssets 属性は、<PackageReference> で指定されているパッケージに属するアセットのうち、使う必要がないものを指定します。ExcludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should not be consumed.

PrivateAssets 属性は、<PackageReference> で指定されているパッケージに属するアセットで、使う必要はあるが、次のプロジェクトに渡してはならないものを指定します。PrivateAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed but not flow to the next project. この属性が存在しない場合、AnalyzersBuildContentFiles アセットは既定でプライベートになります。The Analyzers, Build and ContentFiles assets are private by default when this attribute is not present.


PrivateAssetsproject.json/xproj SuppressParent 要素と同等です。PrivateAssets is equivalent to the project.json/xproj SuppressParent element.

これらの属性には以下の項目を 1 つ以上含めることができ、複数ある場合はセミコロン ; 文字で区切ります。These attributes can contain one or more of the following items, separated by the semicolon ; character if more than one is listed:

  • Compile - コンパイルで使用できる lib フォルダーの内容です。Compile – the contents of the lib folder are available to compile against.
  • Runtime - 配布する runtime フォルダーの内容です。Runtime – the contents of the runtime folder are distributed.
  • ContentFiles - 使用する contentfiles フォルダーの内容です。ContentFiles – the contents of the contentfiles folder are used.
  • Build - 使用する build フォルダーのプロパティ/ターゲットです。Build – the props/targets in the build folder are used.
  • Native - ランタイムの output フォルダーにコピーするネイティブ アセットの内容です。Native – the contents from native assets are copied to the output folder for runtime.
  • Analyzers - アナライザーが使用されます。Analyzers – the analyzers are used.

代わりに、次の値を属性に含めることもできます。Alternatively, the attribute can contain:

  • None - いずれのアセットも使用されません。None – none of the assets are used.
  • All - すべてのアセットが使用されます。All – all assets are used.


<DotNetCliToolReference> 項目要素は、プロジェクトのコンテキストでユーザーが復元を望む CLI ツールを指定します。A <DotNetCliToolReference> item element specifies the CLI tool that the user wants to restore in the context of the project. project.jsontools ノードに代わるものです。It's a replacement for the tools node in project.json.

<DotNetCliToolReference Include="<package-id>" Version="" />


Version は、復元するパッケージのバージョンを指定します。Version specifies the version of the package to restore. この属性は、NuGet バージョン管理スキームの規則に従います。The attribute respects the rules of the NuGet versioning scheme. 既定の動作では、バージョンを正確に一致させます。The default behavior is an exact version match. たとえば、Version="1.2.3" を指定すると、パッケージのバージョンが正確に 1.2.3 であることを表す NuGet 表記の [1.2.3] と同じになります。For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3] for the exact 1.2.3 version of the package.


<RuntimeIdentifiers> プロパティ要素では、プロジェクトのランタイム識別子 (RID) のセミコロン区切りリストを指定できます。The <RuntimeIdentifiers> property element lets you specify a semicolon-delimited list of Runtime Identifiers (RIDs) for the project. RID により、自己完結型の展開を発行できます。RIDs enable publishing self-contained deployments.



<RuntimeIdentifier> プロパティ要素では、プロジェクトのランタイム識別子 (RID) を 1 つだけ指定できます。The <RuntimeIdentifier> property element allows you to specify only one Runtime Identifier (RID) for the project. RID により、自己完結型の展開を発行できます。The RID enables publishing a self-contained deployment.


複数のランタイムに対して発行する必要がある場合、代わりに <RuntimeIdentifiers> (複数) を使用します。Use <RuntimeIdentifiers> (plural) instead if you need to publish for multiple runtimes. <RuntimeIdentifier> では、必要なランタイムが 1 つだけのとき、ビルドが速くなります。<RuntimeIdentifier> can provide faster builds when only a single runtime is required.


<PackageTargetFallback> プロパティ要素では、パッケージの復元時に使用する、互換性のある一連のターゲットを指定できます。The <PackageTargetFallback> property element allows you to specify a set of compatible targets to be used when restoring packages. dotnet TxM (Target x Moniker) を使用するパッケージに、dotnet TxM を宣言しないパッケージで動作することを許可するように設計されています。It's designed to allow packages that use the dotnet TxM (Target x Moniker) to operate with packages that don't declare a dotnet TxM. プロジェクトで dotnet TxM を使用せず、依存するすべてのパッケージに dotnet TxM を与える必要がある場合、非 dotnet プラットフォームを dotnet 対応にするためにプロジェクトに <PackageTargetFallback> を追加します。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.

次の例では、プロジェクトのすべてのターゲットにフォールバックを提供しています。The following example provides the fallbacks for all targets in your project:

</PackageTargetFallback >

次の例では、netcoreapp2.1 ターゲットにのみフォールバックを指定しています。The following example specifies the fallbacks only for the netcoreapp2.1 target:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netcoreapp2.1'">
</PackageTargetFallback >

ビルド イベントBuild events

プロジェクト ファイルでビルド前およびビルド後のイベントを指定する方法が変更されました。The way that pre-build and post-build events are specified in the project file has changed. $ (ProjectDir) などのマクロが解決されないため、PreBuildEvent および PostBuildEvent プロパティは SDK スタイルのプロジェクト形式では推奨されません。The properties PreBuildEvent and PostBuildEvent are not recommended in the SDK-style project format, because macros such as $(ProjectDir) are not resolved. たとえば、次のコードはサポートされなくなりました。For example, the following code is no longer supported:

    <PreBuildEvent>"$(ProjectDir)PreBuildEvent.bat" "$(ProjectDir)..\" "$(ProjectDir)" "$(TargetDir)" />

SDK スタイルのプロジェクトでは、PreBuild または PostBuild という名前の MSBuild ターゲットを使用し、PreBuildBeforeTargets プロパティまたは AfterTargetsPostBuild プロパティを設定します。In SDK-style projects, use an MSBuild target named PreBuild or PostBuild and set the BeforeTargets property for PreBuild or the AfterTargets property for PostBuild. 前の例では、次のコードを使用します。For the preceding example, use the following code:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="&quot;$(ProjectDir)PreBuildEvent.bat&quot; &quot;$(ProjectDir)..\&quot; &quot;$(ProjectDir)&quot; &quot;$(TargetDir)&quot;" />

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
   <Exec Command="echo Output written to $(TargetDir)" />


MSBuild ターゲットには任意の名前を使用できますが、Visual Studio IDE では PreBuildPostBuild ターゲットが認識されるため、Visual Studio IDE でコマンドを編集できるようにするには、これらの名前を使用することをお勧めします。You can use any name for the MSBuild targets, but the Visual Studio IDE recognizes PreBuild and PostBuild targets, so we recommend using those names so that you can edit the commands in the Visual Studio IDE.

NuGet メタデータ プロパティNuGet metadata properties

MSBuild への移行に伴い、project.json ファイルから csproj ファイルに NuGet パッケージをパックするときに使用される入力メタデータを移動しました。With the move to MSBuild, we have moved the input metadata that is used when packing a NuGet package from project.json to .csproj files. 入力は MSBuild プロパティなので、<PropertyGroup> グループ内で行う必要があります。The inputs are MSBuild properties so they have to go within a <PropertyGroup> group. 次に示すのは、dotnet pack コマンドまたは SDK の一部である Pack MSBuild ターゲットを使用するときに、パッキング プロセスへの入力として使用されるプロパティの一覧です。The following is the list of properties that are used as inputs to the packing process when using the dotnet pack command or the Pack MSBuild target that is part of the SDK:


プロジェクトをパックできるかどうかを示すブール値。A Boolean value that specifies whether the project can be packed. 既定値は true です。The default value is true.


結果のパッケージのバージョンを指定します。Specifies the version that the resulting package will have. すべてのフォームの NuGet バージョン文字列を受け入れます。Accepts all forms of NuGet version string. 既定値は $(Version) です。つまり、プロジェクトのプロパティ Version の値です。Default is the value of $(Version), that is, of the property Version in the project.


結果のパッケージの名前を指定します。Specifies the name for the resulting package. 指定しない場合、pack 操作の既定では、AssemblyName またはディレクトリ名をパッケージ名として使用します。If not specified, the pack operation will default to using the AssemblyName or directory name as the name of the package.


人が読みやすいパッケージのタイトル。通常、nuget.org と、Visual Studio のパッケージ マネージャーの UI 画面で使用されます。A human-friendly title of the package, typically used in UI displays as on nuget.org and the Package Manager in Visual Studio. 指定しない場合、パッケージ ID が代わりに使用されます。If not specified, the package ID is used instead.


nuget.org のプロファイル名と一致するパッケージ作成者をセミコロンで区切った一覧。これらは nuget.org の NuGet ギャラリーに表示され、同じ作成者によるパッケージの相互参照に使用されます。A semicolon-separated list of packages authors, matching the profile names on nuget.org. These are displayed in the NuGet Gallery on nuget.org and are used to cross-reference packages by the same authors.


UI 画面用のパッケージの長い説明。A long description of the package for UI display.


アセンブリの長い説明。A long description for the assembly. PackageDescription が指定されていない場合、このプロパティはパッケージの説明としても使用されます。If PackageDescription is not specified then this property is also used as the description of the package.

パッケージの著作権の詳細。Copyright details for the package.


クライアントがユーザーに対して、パッケージのインストール前にパッケージ ライセンスに同意することを必須にするかどうかを示すブール値。A Boolean value that specifies whether the client must prompt the consumer to accept the package license before installing the package. 既定値は、false です。The default is false.


SPDX ライセンス識別子、または式です。An SPDX license identifier or expression. たとえば、Apache-2.0 のようにします。For example, Apache-2.0.

SPDX ライセンス識別子の完全な一覧はこちらをご覧ください。Here is the complete list of SPDX license identifiers. ライセンス タイプ式を使用する場合、NuGet.org では OSI または FSF で承認されたライセンスのみが受け付けられます。NuGet.org accepts only OSI or FSF approved licenses when using license type expression.

ライセンス式の正確な構文については、ABNF をご覧ください。The exact syntax of the license expressions is described below in ABNF.

license-id            = <short form license identifier from https://spdx.org/spdx-specification-21-web-version#h.luq9dgcle9mo>

license-exception-id  = <short form license exception identifier from https://spdx.org/spdx-specification-21-web-version#h.ruv3yl8g6czd>

simple-expression = license-id / license-id”+”

compound-expression =  1*1(simple-expression /
                simple-expression "WITH" license-exception-id /
                compound-expression "AND" compound-expression /
                compound-expression "OR" compound-expression ) /
                "(" compound-expression ")" )

license-expression =  1*1(simple-expression / compound-expression / UNLICENSED)


一度に指定できるのは、PackageLicenseExpressionPackageLicenseFilePackageLicenseUrl のどれか 1 つだけです。Only one of PackageLicenseExpression, PackageLicenseFile and PackageLicenseUrl can be specified at a time.


SPDX 識別子が割り当てられていないライセンス、またはカスタム ライセンスを使用している場合、パッケージ内のライセンス ファイルへのパス (それ以外の場合は、PackageLicenseExpression が優先されます)Path to a license file within the package if you are using a license that hasn’t been assigned an SPDX identifier, or it is a custom license (Otherwise PackageLicenseExpression is preferred)

PackageLicenseUrl を置き換えるもので、PackageLicenseExpression と組み合わせることはできず、Visual Studio 15.9.4、.NET SDK 2.1.502 または 2.2.101 以降が必要です。Replaces PackageLicenseUrl, can't be combined with PackageLicenseExpression and requires Visual Studio 15.9.4, .NET SDK 2.1.502 or 2.2.101, or newer.

プロジェクトに明示的に追加することによって、ライセンス ファイルをパックする必要があります。使用例を次に示します。You will need to ensure the license file is packed by adding it explicitly to the project, example usage:

  <None Include="licenses\LICENSE.txt" Pack="true" PackagePath="$(PackageLicenseFile)"/>


パッケージに適用されるライセンスの URL。An URL to the license that is applicable to the package. ("Visual Studio 15.9.4、.NET SDK 2.1.502 および 2.2.101 以降では非推奨")(deprecated since Visual Studio 15.9.4, .NET SDK 2.1.502 and 2.2.101)


UI 画面のパッケージのアイコンとして使用する背景が透明な 64x64 の画像の URL。A URL for a 64x64 image with transparent background to use as the icon for the package in UI display.


パッケージのリリース ノート。Release notes for the package.


パッケージを指定するタグのセミコロン区切りの一覧。A semicolon-delimited list of tags that designates the package.


パックされたパッケージをドロップする出力パスを指定します。Determines the output path in which the packed package will be dropped. 既定値は $(OutputPath) です。Default is $(OutputPath).


このブール値は、プロジェクトをパックするときに、パッケージが追加のシンボル パッケージを作成するかどうかを指定します。This Boolean value indicates whether the package should create an additional symbols package when the project is packed. シンボル パッケージの形式は、SymbolPackageFormat プロパティで制御します。The symbols package's format is controlled by the SymbolPackageFormat property.


シンボル パッケージの形式を指定します。Specifies the format of the symbols package. "symbols.nupkg" では、 .symbols.nupkg 拡張子と共に、PDB、DLL、およびその他の出力ファイルを含む従来のシンボル パッケージが作成されます。If "symbols.nupkg", a legacy symbols package will be created with a .symbols.nupkg extension containing PDBs, DLLs, and other output files. "snupkg" では、ポータブル PDB を含む snupkg シンボル パッケージが作成されます。If "snupkg", a snupkg symbol package will be created containing the portable PDBs. 既定値は "symbols.nupkg" です。Default is "symbols.nupkg".


このブール値は、パック プロセスでソース パッケージを作成するかどうかを示します。This Boolean value indicates whether the pack process should create a source package. ソース パッケージには、ライブラリのソース コードと PDB ファイルが含まれます。The source package contains the library's source code as well as PDB files. ソース ファイルは、結果のパッケージ ファイルの src/ProjectName ディレクトリに置かれます。Source files are put under the src/ProjectName directory in the resulting package file.


すべての出力ファイルを lib フォルダーではなく tools フォルダーにコピーするかどうかを指定します。Specifies whether all output files 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 the .csproj file.


パッケージのソース コードがある、またはビルド元のリポジトリの URL を指定します。Specifies the URL for the repository where the source code for the package resides and/or from which it's being built.


リポジトリの種類を指定します。Specifies the type of the repository. 既定値は "git" です。Default is "git".


リポジトリ内のソース ブランチの名前を指定します。Specifies the name of the source branch in the repository. プロジェクトが NuGet パッケージにパッケージ化されると、パッケージ メタデータに追加されます。When the project is packaged in a NuGet package, it's added to the package metadata.


任意のリポジトリ コミットまたは変更セット。パッケージがどのソースに対してビルドされたかを示します。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. プロジェクトが NuGet パッケージにパッケージ化されると、このコミットまたは変更セットがパッケージ メタデータに追加されます。When the project is packaged in a NuGet package, this commit or changeset is added to the package metadata.


パッケージのビルド後に、パックでパッケージの分析を実行しないことを指定します。Specifies that pack should not run package analysis after building the package.


nuget.exe および Visual Studio パッケージ マネージャーで強制する、このパッケージをインストールできる NuGet クライアントの最小バージョンを指定します。Specifies the minimum version of the NuGet client that can install this package, enforced by nuget.exe and the Visual Studio Package Manager.


このブール値は、ビルド出力アセンブリを .nupkg ファイルにパックするかどうかを指定します。This Boolean values specifies whether the build output assemblies should be packed into the .nupkg file or not.


このブール値は、種類が Content の項目を結果のパッケージに自動的に含めるかどうかを指定します。This Boolean value specifies whether any items that have a type of Content will be included in the resulting package automatically. 既定値は、true です。The default is true.


出力アセンブリを配置するフォルダーを指定します。Specifies the folder where to place the output assemblies. 出力アセンブリ (および他の出力ファイル) は、各フレームワーク フォルダーにコピーされます。The output assemblies (and other output files) are copied into their respective framework folders.


このプロパティには、PackagePath が指定されていない場合に、すべてのコンテンツ ファイルを配置する既定の場所を指定します。This property specifies the default location of where all the content files should go if PackagePath is not specified for them. 既定値は "content;contentFiles" です。The default value is "content;contentFiles".


パックに使用する .nuspec ファイルの相対パスまたは絶対パス。Relative or absolute path to the .nuspec file being used for packing.


.nuspec ファイルを指定すると、情報のパッケージにのみ使用され、プロジェクト内の情報は使用されません。If the .nuspec file is specified, it's used exclusively for packaging information and any information in the projects is not used.


.nuspec ファイルのベース パス。Base path for the .nuspec file.


キー=値ペアのセミコロン区切りの一覧。Semicolon separated list of key=value pairs.

AssemblyInfo プロパティAssemblyInfo properties

通常、AssemblyInfo ファイル内に存在していたアセンブリ属性は、プロパティから自動的に生成されるようになりました。Assembly attributes that were typically present in an AssemblyInfo file are now automatically generated from properties.

属性ごとのプロパティProperties per attribute

次の表に示すように、各属性にはコンテンツを制御するプロパティと生成を無効にするプロパティがあります。Each attribute has a property that control its content and another to disable its generation as shown in the following table:

属性Attribute プロパティProperty 無効にするプロパティProperty to disable
AssemblyCompanyAttribute Company GenerateAssemblyCompanyAttribute
AssemblyConfigurationAttribute Configuration GenerateAssemblyConfigurationAttribute
AssemblyCopyrightAttribute Copyright GenerateAssemblyCopyrightAttribute
AssemblyDescriptionAttribute Description GenerateAssemblyDescriptionAttribute
AssemblyFileVersionAttribute FileVersion GenerateAssemblyFileVersionAttribute
AssemblyInformationalVersionAttribute InformationalVersion GenerateAssemblyInformationalVersionAttribute
AssemblyProductAttribute Product GenerateAssemblyProductAttribute
AssemblyTitleAttribute AssemblyTitle GenerateAssemblyTitleAttribute
AssemblyVersionAttribute AssemblyVersion GenerateAssemblyVersionAttribute
NeutralResourcesLanguageAttribute NeutralLanguage GenerateNeutralResourcesLanguageAttribute


  • AssemblyVersionFileVersion の既定値は、サフィックスなしで $(Version) の値を受け取ることです。AssemblyVersion and FileVersion default is to take the value of $(Version) without suffix. たとえば、$(Version)1.2.3-beta.4 の場合、値は 1.2.3 です。For example, if $(Version) is 1.2.3-beta.4, then the value would be 1.2.3.
  • InformationalVersion の既定値は、$(Version) の値です。InformationalVersion defaults to the value of $(Version).
  • プロパティが存在する場合、InformationalVersion の末尾には $(SourceRevisionId) が付加されます。InformationalVersion has $(SourceRevisionId) appended if the property is present. IncludeSourceRevisionInInformationalVersion を使用して無効にすることができます。It can be disabled using IncludeSourceRevisionInInformationalVersion.
  • NuGet メタデータには、Copyright および Description プロパティも使用されます。Copyright and Description properties are also used for NuGet metadata.
  • Configuration はすべてのビルド プロセスで共有され、設定には dotnet コマンドの--configuration パラメーターを使用します。Configuration is shared with all the build process and set via the --configuration parameter of dotnet commands.


すべての AssemblyInfo 生成を有効または無効にするブール値。A Boolean that enable or disable all the AssemblyInfo generation. 既定値は true です。The default value is true.


生成されたアセンブリ情報ファイルのパス。The path of the generated assembly info file. 既定値は $(IntermediateOutputPath) (obj) ディレクトリ内のファイルです。Default to a file in the $(IntermediateOutputPath) (obj) directory.