.NET SDK プロジェクトの MSBuild リファレンス

このページは、.NET プロジェクトの構成に使用できる、MSBuild のプロパティと項目のリファレンスです。

注意

このページの編集は進行中であり、.NET SDK の便利な MSBuild プロパティがすべて記載されている訳ではありません。 一般的な MSBuild プロパティの一覧については、「MSBuild プロジェクトの共通プロパティ」を参照してください。

フレームワークのプロパティ

このセクションでは、次の MSBuild プロパティについて説明します。

TargetFramework

TargetFramework プロパティには、アプリのターゲット フレームワーク バージョンを指定します。 有効なターゲット フレームワーク モニカーの一覧については、「SDK スタイルのプロジェクトでのターゲット フレームワーク」を参照してください。

<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

詳細については、「SDK スタイルのプロジェクトでのターゲット フレームワーク」を参照してください。

TargetFrameworks

アプリで複数のプラットフォームをターゲットにする場合は、TargetFrameworks プロパティを使用します。 有効なターゲット フレームワーク モニカーの一覧については、「SDK スタイルのプロジェクトでのターゲット フレームワーク」を参照してください。

注意

TargetFramework (単数形) が指定されている場合、このプロパティは無視されます。

<PropertyGroup>
  <TargetFrameworks>netcoreapp3.1;net462</TargetFrameworks>
</PropertyGroup>

詳細については、「SDK スタイルのプロジェクトでのターゲット フレームワーク」を参照してください。

NetStandardImplicitPackageVersion

注意

このプロパティは、netstandard1.x を使用するプロジェクトにのみ適用されます。 netstandard2.x を使用するプロジェクトには適用されません。

メタパッケージ バージョンよりも低いフレームワーク バージョンを指定する場合は、NetStandardImplicitPackageVersion プロパティを使用します。 次の例のプロジェクト ファイルは、netstandard1.3 をターゲットにしていますが、NETStandard.Library の 1.6.0 バージョンを使用しています。

<PropertyGroup>
  <TargetFramework>netstandard1.3</TargetFramework>
  <NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
</PropertyGroup>

アセンブリ情報生成のプロパティ

GenerateAssemblyCompanyAttribute

このプロパティは、Company プロパティがアセンブリの AssemblyCompanyAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
</PropertyGroup>

GenerateAssemblyConfigurationAttribute

このプロパティは、Configuration プロパティがアセンブリの AssemblyConfigurationAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
</PropertyGroup>

GenerateAssemblyCopyrightAttribute

このプロパティは、Copyright プロパティがアセンブリの AssemblyCopyrightAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
</PropertyGroup>

GenerateAssemblyDescriptionAttribute

このプロパティは、Description プロパティがアセンブリの AssemblyDescriptionAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute>
</PropertyGroup>

GenerateAssemblyFileVersionAttribute

このプロパティは、FileVersion プロパティがアセンブリの AssemblyFileVersionAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
</PropertyGroup>

GenerateAssemblyInfo

プロジェクトの AssemblyInfo 属性の生成を制御します。 既定値は true です。 ファイルの生成を無効にするには、false を使用します。

<PropertyGroup>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

GeneratedAssemblyInfoFile 設定は、生成されるファイルの名前を制御します。

GenerateAssemblyInfo 値が true の場合、プロジェクトのプロパティは AssemblyInfo 属性に変換されます。 次の表に、属性を生成するプロジェクトのプロパティとその生成を無効にできるプロパティを示します。

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

これらの設定に関する注意事項:

  • AssemblyVersionFileVersion の既定値は、サフィックスのない $(Version) の値です。 たとえば、$(Version)1.2.3-beta.4 の場合、値は 1.2.3 です。
  • InformationalVersion の既定値は、$(Version) の値です。
  • $(SourceRevisionId) プロパティが存在する場合は、それが InformationalVersion の後に追加されます。 IncludeSourceRevisionInInformationalVersion を使用して、この動作を無効にすることができます。
  • NuGet メタデータには、Copyright および Description プロパティも使用されます。
  • Configuration (既定値は Debug) は、すべての MSBuild ターゲットと共有されます。 これは、dotnet コマンド (dotnet pack など) の --configuration オプションを使用して設定できます。
  • 一部のプロパティは、NuGet パッケージを作成するときに使用されます。 詳細については、「パッケージのプロパティ」を参照してください。

.NET Framework からの移行

.NET Framework プロジェクト テンプレートでは、これらのアセンブリ情報属性を設定したコード ファイルを作成します。 通常、このファイルは .\Properties\AssemblyInfo.cs または .\Properties\AssemblyInfo.vb にあります。 SDK スタイルのプロジェクトでは、プロジェクトの設定に基づいてこのファイルが生成されます。 両方を持つことはできません。 コードを .NET 5 (および .NET Core 3.1) 以降に移植する場合は、次のいずれかの操作を行います。

  • GenerateAssemblyInfofalse に設定することにより、アセンブリ情報属性を含む一時コード ファイルの生成を無効にします。 これにより、AssemblyInfo ファイルを保持することができます。
  • AssemblyInfo ファイルの設定をプロジェクト ファイルに移行し、AssemblyInfo ファイルを削除します。

GenerateAssemblyInformationalVersionAttribute

このプロパティは、InformationalVersion プロパティがアセンブリの AssemblyInformationalVersionAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>

GenerateAssemblyProductAttribute

このプロパティは、Product プロパティがアセンブリの AssemblyProductAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>

GenerateAssemblyTitleAttribute

このプロパティは、AssemblyTitle プロパティがアセンブリの AssemblyTitleAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
</PropertyGroup>

GenerateAssemblyVersionAttribute

このプロパティは、AssemblyVersion プロパティがアセンブリの AssemblyVersionAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
</PropertyGroup>

GeneratedAssemblyInfoFile

このプロパティは、生成されるアセンブリ情報ファイルの相対パスまたは絶対パスを定義します。 既定値は、$(IntermediateOutputPath) (通常は obj) ディレクトリ内の [プロジェクト名].AssemblyInfo.[cs|vb] という名前のファイルです。

<PropertyGroup>
  <GeneratedAssemblyInfoFile>assemblyinfo.cs</GeneratedAssemblyInfoFile>
</PropertyGroup>

GenerateNeutralResourcesLanguageAttribute

このプロパティは、NeutralLanguage プロパティがアセンブリの NeutralResourcesLanguageAttribute を生成するかどうかを制御します。 既定値は true です。

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>

パッケージのプロパティ

PackageIdPackageVersionPackageIconTitleDescription などのプロパティを指定し、プロジェクトから作成されたパッケージについて説明できます。 以上のプロパティとその他のプロパティの詳細については、「pack ターゲット」を参照してください。

<PropertyGroup>
  ...
  <PackageId>ClassLibDotNetStandard</PackageId>
  <Version>1.0.0</Version>
  <Authors>John Doe</Authors>
  <Company>Contoso</Company>
</PropertyGroup>

このセクションでは、次の MSBuild プロパティについて説明します。

AppendTargetFrameworkToOutputPath

AppendTargetFrameworkToOutputPath プロパティは、ターゲット フレームワーク モニカー (TFM) を出力パス (OutputPath で定義されている) に追加するかどうかを制御します。 .NET SDK はターゲット フレームワークを、それが存在する場合にはランタイム識別子を出力パスに自動的に追加します。 AppendTargetFrameworkToOutputPathfalse に設定すると、TFM が出力パスに追加されなくなります。 ただし、出力パスに TFM がないと、複数のビルド成果物が相互に上書きされる可能性があります。

たとえば、.NET 5.0 アプリの場合、出力パスは次の設定を使用して bin\Debug\net5.0 から bin\Debug に変更されます。

<PropertyGroup>
  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>

AppendRuntimeIdentifierToOutputPath

AppendRuntimeIdentifierToOutputPath プロパティは、ランタイム識別子 (RID) を出力パスに追加するかどうかを制御します。 .NET SDK はターゲット フレームワークを、それが存在する場合にはランタイム識別子を出力パスに自動的に追加します。 AppendRuntimeIdentifierToOutputPathfalse に設定すると、RID が出力パスに追加されなくなります。

たとえば、.NET 5.0 アプリで RID が win10-x64 の場合、出力パスは次の設定を使用して bin\Debug\net5.0\win10-x64 から bin\Debug\net5.0 に変更されます。

<PropertyGroup>
  <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>

CopyLocalLockFileAssemblies

CopyLocalLockFileAssemblies プロパティは、他のライブラリに依存しているプラグイン プロジェクトにとって便利です。 このプロパティを true に設定すると、NuGet パッケージの依存関係が出力ディレクトリにコピーされます。 つまり、dotnet build の出力を使用し、任意のコンピューターでプラグインを実行できます。

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

ヒント

あるいは、dotnet publish を使用し、クラス ライブラリを発行できます。 詳細については、「dotnet publish」を参照してください。

IsPublishable

IsPublishable プロパティを使用すると、Publish ターゲットを実行できます。 このプロパティは、 .*proj ファイルと Publishターゲット (dotnet publish コマンドなど) を使用するプロセスにのみ影響します。 これは PublishOnly ターゲットを使用する Visual Studio での発行には影響しません。 既定値は true です。

このプロパティを使用すると、発行する必要があるプロジェクトを自動的に選択できるようになるため、ソリューション ファイルで dotnet publish を実行する場合に便利です。

<PropertyGroup>
  <IsPublishable>false</IsPublishable>
</PropertyGroup>

PreserveCompilationContext

PreserveCompilationContext プロパティを使うと、ビルド時に使用されたのと同じ設定で、ビルドまたは発行されたアプリケーションで実行時により多くのコードをコンパイルできるようになります。 ビルド時に参照されるアセンブリは、出力ディレクトリの ref サブディレクトリにコピーされます。 参照アセンブリの名前は、コンパイラに渡されるオプションと共に、アプリケーションの .deps.json ファイルに格納されます。 この情報は、DependencyContext.CompileLibrariesDependencyContext.CompilationOptions のプロパティを使用して取得できます。

この機能は、ほとんどの場合、Razor ファイルの実行時コンパイルをサポートするために ASP.NET Core MVC と Razor Pages によって内部的に使用されます。

<PropertyGroup>
  <PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>

PreserveCompilationReferences

PreserveCompilationReferences プロパティは PreserveCompilationContext プロパティと似ていますが、 .deps.json ファイルではなく、発行ディレクトリに参照アセンブリのみがコピーされる点が異なります。

<PropertyGroup>
  <PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>

詳細については、「Razor SDK」の「プロパティ」を参照してください。

RuntimeIdentifier

RuntimeIdentifier プロパティを使用すると、プロジェクトに 1 つのランタイム識別子 (RID) を指定できます。 RID により、自己完結型の展開を発行できます。

<PropertyGroup>
  <RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>
</PropertyGroup>

RuntimeIdentifiers

RuntimeIdentifiers プロパティには、プロジェクトのランタイム識別子 (RID) のセミコロン区切りリストを指定できます。 複数のランタイムに発行する必要がある場合は、このプロパティを使用します。 RuntimeIdentifiers は、復元時に適切な資産をグラフに確実に含めるために使用されます。

ヒント

RuntimeIdentifier (単数形) を使用すると、必要なランタイムが 1 つだけのとき、ビルドが速くなります。

<PropertyGroup>
  <RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>

UseAppHost

UseAppHost プロパティにより、デプロイ用にネイティブ実行可能ファイルを作成するかどうかが制御されます。 自己完結型の配置にはネイティブの実行可能ファイルが必要です。

.NET Core 3.0 以降のバージョンでは、既定でフレームワークに依存する実行可能ファイルが作成されます。 実行可能ファイルの生成を無効にするには、UseAppHost プロパティを false に設定します。

<PropertyGroup>
  <UseAppHost>false</UseAppHost>
</PropertyGroup>

配置の詳細については、.NET アプリケーションの配置に関するページを参照してください。

このセクションでは、次の MSBuild プロパティについて説明します。

EmbeddedResourceUseDependentUponConvention

EmbeddedResourceUseDependentUponConvention プロパティは、リソース マニフェスト ファイル名が、リソース ファイルと併置されているソース ファイルの型情報から生成されるかどうかを定義します。 たとえば、Form1.vbForm1.cs と同じフォルダーにあり、EmbeddedResourceUseDependentUponConventiontrue に設定されている場合、生成された .resources ファイルは Form1.cs で定義されている最初の型から名前を受け取ります。 たとえば、MyNamespace.Form1Form1.cs で定義されている最初の型である場合、生成されたファイル名は MyNamespace.Form1.resources になります。

注意

LogicalNameManifestResourceName、または DependentUpon メタデータが EmbeddedResource 項目に対して指定されている場合、そのリソース ファイルに対して生成されたマニフェスト ファイル名は、代わりにそのメタデータがベースになります。

既定では、新しい .NET プロジェクトでは、このプロパティは true に設定されます。 false に設定され、かつプロジェクト ファイルの EmbeddedResource 項目に LogicalNameManifestResourceNameDependentUpon のメタデータがどれも指定されていない場合、リソース マニフェストのファイル名は、プロジェクトのルート名前空間と、 .resx ファイルへの相対ファイル パスがベースになります。 詳細については、「リソース マニフェスト ファイルの名前付けの方法」を参照してください。

<PropertyGroup>
  <EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>

LangVersion

LangVersion プロパティを使用すると、特定のプログラミング言語バージョンを指定できます。 たとえば、C# プレビュー機能にアクセスする場合は、LangVersionpreview に設定します。

<PropertyGroup>
  <LangVersion>preview</LangVersion>
</PropertyGroup>

詳細については、「C# 言語のバージョン管理」を参照してください。

既定の項目の包含プロパティ

このセクションでは、次の MSBuild プロパティについて説明します。

詳細については、「既定で含まれるものと除外されるもの」を参照してください。

DefaultItemExcludes

DefaultItemExcludes プロパティを使用して、含まれる、除外される、および削除の glob から除外するファイルとフォルダーの glob パターンを定義します。 既定では、 ./bin および ./obj フォルダーは、glob パターンから除外されます。

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);**/*.myextension</DefaultItemExcludes>
</PropertyGroup>

DefaultExcludesInProjectFolder

DefaultExcludesInProjectFolder プロパティを使用して、含まれる、除外される、および削除の glob から除外する、プロジェクト フォルダーのファイルとフォルダーの glob パターンを定義します。 既定では、ピリオド (.) で始まるフォルダー ( .git.vs など) は、glob パターンから除外されます。

このプロパティは、プロジェクト フォルダー内のファイルとフォルダーのみが考慮される点を除いて、DefaultItemExcludes プロパティとよく似ています。 glob パターンが意図せずにプロジェクト フォルダー外の項目と相対パスを照合する場合は、DefaultItemExcludes プロパティの代わりに DefaultExcludesInProjectFolder プロパティを使用します。

<PropertyGroup>
  <DefaultExcludesInProjectFolder>$(DefaultExcludesInProjectFolder);**/myprefix*/**</DefaultExcludesInProjectFolder>
</PropertyGroup>

EnableDefaultItems

EnableDefaultItems プロパティは、コンパイル項目、埋め込みリソース項目、および None 項目がプロジェクトに暗黙的に含まれるかどうかを制御します。 既定値は true です。 EnableDefaultItems プロパティを false に設定して、暗黙的なファイルの組み込みをすべて無効にします。

<PropertyGroup>
  <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>

EnableDefaultCompileItems

EnableDefaultCompileItems プロパティは、コンパイル項目がプロジェクトに暗黙的に含まれるかどうかを制御します。 既定値は true です。 EnableDefaultCompileItems プロパティを false に設定して、*.cs およびその他の言語拡張ファイルの暗黙的な包含を無効にします。

<PropertyGroup>
  <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>

EnableDefaultEmbeddedResourceItems

EnableDefaultEmbeddedResourceItems プロパティは、埋め込みリソース項目がプロジェクトに暗黙的に含まれるかどうかを制御します。 既定値は true です。 埋め込みリソース ファイルの暗黙的な包含を無効にするには、EnableDefaultEmbeddedResourceItems プロパティを false に設定します。

<PropertyGroup>
  <EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>

EnableDefaultNoneItems

EnableDefaultNoneItems プロパティは、None 項目 (ビルド プロセスでロールがないファイル) がプロジェクトに暗黙的に含まれるかどうかを制御します。 既定値は true です。 EnableDefaultNoneItems プロパティを false に設定して、None 項目の暗黙的な包含を無効にします。

<PropertyGroup>
  <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>

コード分析のプロパティ

このセクションでは、次の MSBuild プロパティについて説明します。

AnalysisLevel

AnalysisLevel プロパティを使用すると、コード分析レベルを指定できます。 たとえば、プレビューのコード アナライザーにアクセスする場合は、AnalysisLevelpreview に設定します。

既定値:

  • プロジェクトのターゲットが .NET 5.0 以降の場合、または AnalysisMode プロパティを追加した場合、既定値は latest になります。
  • それ以外の場合、このプロパティは、プロジェクト ファイルに明示的に追加されていない限り省略されます。
<PropertyGroup>
  <AnalysisLevel>preview</AnalysisLevel>
</PropertyGroup>

次の表で利用可能なオプションについて説明します。

説明
latest リリースされている最新のコード アナライザーが使用されます。 既定値です。
preview 最新のコード アナライザーが、プレビュー段階であっても使用されます。
5.0 新しいルールが使用可能な場合でも、.NET 5.0 リリースで有効になっていた一連のルールが使用されます。
5 新しいルールが使用可能な場合でも、.NET 5.0 リリースで有効になっていた一連のルールが使用されます。

注意

このプロパティは、プロジェクト SDK を参照しないプロジェクト (たとえば、Microsoft. CodeAnalysis. NetAnalyzers NuGet パッケージを参照するレガシ .NET Framework プロジェクト) のコード分析には影響しません。

AnalysisMode

.NET 5.0 以降、.NET SDK には、すべての "CA" コード品質ルールが付属しています。 既定では、ビルド警告として一部のルールが有効になっています。 AnalysisMode プロパティを使用すると、既定で有効になるルールのセットをカスタマイズできます。 より積極的な (オプトアウト) 分析モード、またはより保守的な (オプトイン) 分析モードに切り替えることができます。 たとえば、既定ですべてのルールをビルド警告として有効にする場合は、値を AllEnabledByDefault に設定します。

<PropertyGroup>
  <AnalysisMode>AllEnabledByDefault</AnalysisMode>
</PropertyGroup>

次の表で利用可能なオプションについて説明します。

説明
Default 既定のモードでは、特定のルールがビルド警告として有効になり、特定のルールが Visual Studio IDE の提案として有効になり、残りは無効になります。
AllEnabledByDefault 積極的な (オプトアウト) モード。すべてのルールが既定でビルド警告として有効になっています。 個々のルールを選択的にオプトアウトして無効にすることができます。
AllDisabledByDefault 保守的な (オプトイン) モード。すべてのルールが既定で無効になっています。 個々のルールを選択的にオプトインして有効にすることができます。

注意

このプロパティは、プロジェクト SDK を参照しないプロジェクト (たとえば、Microsoft. CodeAnalysis. NetAnalyzers NuGet パッケージを参照するレガシ .NET Framework プロジェクト) のコード分析には影響しません。

CodeAnalysisTreatWarningsAsErrors

CodeAnalysisTreatWarningsAsErrors プロパティを使用すると、コード品質分析の警告 (CAxxxx) を警告として扱い、ビルドを中断するかどうかを構成できます。 プロジェクトをビルドするときに -warnaserror フラグを使用すると、.NET コード品質分析の警告もエラーとして扱われます。 コード品質分析の警告がエラーとして扱われないようにするには、プロジェクト ファイル内の CodeAnalysisTreatWarningsAsErrors MSBuild プロパティを false に設定します。

<PropertyGroup>
  <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

EnableNETAnalyzers

.NET 5.0 以降をターゲットとするプロジェクトでは、.NET コード品質分析が既定で有効になっています。 以前のバージョンの .NET をターゲットとする SDK スタイルのプロジェクトで .NET コード分析を有効にするには、EnableNETAnalyzers プロパティを true に設定します。 任意のプロジェクトでコード分析を無効にするには、このプロパティを false に設定します。

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>

注意

このプロパティは、特に、.NET 5+ SDK の組み込みアナライザーに適用されます。 これは NuGet コード分析パッケージをインストールするときには使用しないでください。

EnforceCodeStyleInBuild

注意

この機能は現在試験段階にあり、.NET 5 リリースと .NET 6 リリースの間で変更される可能性があります。

すべての .NET プロジェクトのビルドでは、.NET コード スタイル分析は既定で無効になっています。 EnforceCodeStyleInBuild プロパティを true に設定して、.NET プロジェクトのコード スタイル分析を有効にできます。

<PropertyGroup>
  <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

警告またはエラーになるように構成されているすべてのコード スタイル ルールは、ビルド時に実行され、違反を報告します。

ランタイム構成プロパティ

アプリのプロジェクト ファイルに MSBuild プロパティを指定することで一部のランタイム動作を構成できます。 ランタイム動作のその他の構成方法については、ランタイム構成設定に関する記事をご覧ください。

ConcurrentGarbageCollection

ConcurrentGarbageCollection プロパティでは、バックグラウンド (同時実行) ガベージ コレクションの有効または無効が設定されます。 この値を false に設定すると、バックグラウンド ガベージ コレクションが無効になります。 詳細については、「バックグラウンド GC」を参照してください。

<PropertyGroup>
  <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>

InvariantGlobalization

InvariantGlobalization プロパティでは、アプリを globalization-invariant モードで実行するかどうかを設定します。このモードでは、カルチャ固有のデータにアクセスできません。 この値を true に設定すると、globalization-invariant モードで実行されます。 詳細については、「インバリアント モード」を参照してください。

<PropertyGroup>
  <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

RetainVMGarbageCollection

RetainVMGarbageCollection プロパティでは、将来利用する目的で削除済みメモリ セグメントを待機一覧に載せるように、あるいは削除済みメモリ セグメントを解放するようにガベージ コレクターを設定します。 この値を true に設定すると、セグメントを待機一覧に載せるよう、ガベージ コレクターが命令されます。 詳細については、「VM の保持」を参照してください。

<PropertyGroup>
  <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>

ServerGarbageCollection

ServerGarbageCollection プロパティでは、アプリケーションで使用するガベージ コレクションとしてワークステーション ガベージ コレクションまたはサーバー ガベージ コレクションを設定します。 この値を true に設定すると、サーバー ガベージ コレクションが使用されます。 詳細については、「ワークステーションとサーバー」を参照してください。

<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

ThreadPoolMaxThreads

ThreadPoolMaxThreads プロパティでは、ワーカー スレッド プールの最大スレッド数を設定します。 詳細については、「最大スレッド数」を参照してください。

<PropertyGroup>
  <ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>

ThreadPoolMinThreads

ThreadPoolMinThreads プロパティでは、ワーカー スレッド プールの最小スレッド数を設定します。 詳細については、「最小スレッド数」を参照してください。

<PropertyGroup>
  <ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>

TieredCompilation

TieredCompilation プロパティでは、Just-In-Time (JIT) コンパイラで階層型コンパイルを使用するかどうかを設定します。 この値を false に設定すると、階層型コンパイルが無効になります。 詳細については、「階層型コンパイル」を参照してください。

<PropertyGroup>
  <TieredCompilation>false</TieredCompilation>
</PropertyGroup>

TieredCompilationQuickJit

TieredCompilationQuickJit プロパティでは、JIT コンパイラでクイック JIT を使用するかどうかを設定します。 この値を false に設定すると、クイック JIT が無効になります。 詳細については、「クイック JIT」を参照してください。

<PropertyGroup>
  <TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>

TieredCompilationQuickJitForLoops

TieredCompilationQuickJitForLoops プロパティでは、ループを含むメソッドに対して JIT コンパイラでクリック JIT を使用するかどうかを設定します。 この値を true に設定すると、ループが含まれるメソッドでクイック JIT が有効になります。 詳細については、「ループに対するクイック JIT」を参照してください。

<PropertyGroup>
  <TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>

参照のプロパティ

このセクションでは、次の MSBuild プロパティについて説明します。

AssetTargetFallback

AssetTargetFallback プロパティを使用すると、プロジェクト参照と NuGet パッケージに対して、互換性のある追加のフレームワーク バージョンを指定できます。 たとえば、PackageReference を使用してパッケージの依存関係を指定し、そのパッケージにプロジェクトの TargetFramework と互換性のある資産が含まれない場合は、AssetTargetFallback プロパティが機能します。 参照されたパッケージの互換性は、AssetTargetFallback で指定された各ターゲット フレームワークを使用して再確認されます。 このプロパティは、非推奨のプロパティ PackageTargetFallback に代わるものです。

AssetTargetFallback プロパティを 1 つ以上のターゲット フレームワーク バージョンに設定できます。

<PropertyGroup>
  <AssetTargetFallback>net461</AssetTargetFallback>
</PropertyGroup>

DisableImplicitFrameworkReferences

DisableImplicitFrameworkReferences プロパティを使用すると、.NET Core 3.0 以降のバージョンを対象とする場合に、暗黙的な FrameworkReference の項目を制御できます。 .NET Core 2.1 または .NET Standard 2.0 以前のバージョンを対象としている場合は、これにより、メタパッケージ内のパッケージに対する暗黙的な PackageReference の項目が制御されます。 (メタパッケージは、他のパッケージの依存関係のみで構成されるフレームワーク ベースのパッケージです)。また、このプロパティを使用すると、.NET Framework を対象としている場合に、SystemSystem.Core などの暗黙的な参照も制御できます。

このプロパティを true に設定して、暗黙的な FrameworkReference または PackageReference の項目を無効にします。 このプロパティを true に設定すると、必要なフレームワークまたはパッケージだけに明示的な参照を追加できます。

<PropertyGroup>
  <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>

参照されたパッケージを復元すると、その直接的な依存関係と間接的な依存関係がすべてインストールされます。 RestorePackagesPathRestoreIgnoreFailedSources など、プロパティを指定することでパッケージ復元をカスタマイズできます。 以上のプロパティとその他のプロパティの詳細については、「restore ターゲット」を参照してください。

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

次のプロパティは、dotnet run コマンドを使用してアプリを起動するために使用されます。

RunArguments

RunArguments プロパティを使用すると、実行時にアプリに渡される引数が定義されます。

<PropertyGroup>
  <RunArguments>-mode dryrun</RunArguments>
</PropertyGroup>

ヒント

dotnet run-- オプションを使用して、アプリに渡す追加の引数を指定できます。

RunWorkingDirectory

RunWorkingDirectory プロパティを使用すると、開始するアプリケーション プロセスの作業ディレクトリが定義されます。 絶対パスまたはプロジェクト ディレクトリに対する相対パスを指定できます。 ディレクトリを指定しない場合、作業ディレクトリとして OutDir が使用されます。

<PropertyGroup>
  <RunWorkingDirectory>c:\temp</RunWorkingDirectory>
</PropertyGroup>

このセクションでは、次の MSBuild プロパティについて説明します。

EnableComHosting

EnableComHosting プロパティは、アセンブリで COM サーバーが提供されることを示します。 EnableComHostingtrue に設定することは、EnableDynamicLoadingtrue であることも意味します。

<PropertyGroup>
  <EnableComHosting>True</EnableComHosting>
</PropertyGroup>

詳細については、COM への .NET コンポーネントの公開に関するページを参照してください。

EnableDynamicLoading

EnableDynamicLoading プロパティは、アセンブリが動的に読み込まれたコンポーネントであることを示します。 コンポーネントには、COM ライブラリ、またはネイティブ ホストから使用できる非 COM ライブラリを指定できます。 このプロパティを true に設定すると、次のような効果があります。

  • " .runtimeconfig.json" ファイルが生成される。
  • ロール フォワードLatestMinor に設定される。
  • NuGet 参照がローカルにコピーされる。
<PropertyGroup>
  <EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>

アイテム

MSBuild 項目はビルド システムへの入力です。 項目は、要素名である型に従って指定されます。 たとえば、CompileReference は 2 つの一般的な項目の種類です。 .NET SDK では、次の追加の項目の種類を使用できます。

これらの項目には、標準の項目属性 (IncludeUpdate など) を使用できます。 Include を使用して新しい項目を追加し、Update を使用して既存の項目を変更します。 たとえば、Update は、.NET SDK によって暗黙的に追加された項目を変更するためによく使用されます。

PackageReference

PackageReference 項目では、NuGet パッケージへの参照が定義されます。

Include 属性は、パッケージ ID を指定します。 Version 属性では、バージョンまたはバージョン範囲を指定します。 最小バージョン、最大バージョン、範囲、厳密一致を指定する方法については、「バージョン範囲」を参照してください。

次の例のプロジェクト ファイル スニペットでは、System.Runtime パッケージを参照しています。

<ItemGroup>
  <PackageReference Include="System.Runtime" Version="4.3.0" />
</ItemGroup>

PrivateAssets などのメタデータを使用して依存関係資産を制御することもできます。

<ItemGroup>
  <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
    <PrivateAssets>all</PrivateAssets>
  </PackageReference>
</ItemGroup>

詳細については、プロジェクト ファイルのパッケージ参照に関するページを参照してください。

TrimmerRootAssembly

TrimmerRootAssembly 項目ではアセンブリを "トリミング" から除外できます。 トリミングとは、パッケージ化されたアプリケーションからランタイムの未使用部分を削除するプロセスです。 必要な参照がトリミングによって間違って削除されることもあります。

次の XML では、トリミングから System.Security アセンブリが除外されます。

<ItemGroup>
  <TrimmerRootAssembly Include="System.Security" />
</ItemGroup>

項目メタデータ

標準の MSBuild 項目属性に加えて、次の項目メタデータ タグが .NET SDK によって利用可能になります。

CopyToPublishDirectory

MSBuild 項目の CopyToPublishDirectory メタデータにより、項目が発行ディレクトリにコピーされるタイミングが制御されます。 使用できる値は、項目が変更された場合にのみコピーする PreserveNewest、常に項目をコピーする Always、項目をコピーしない Never です。 パフォーマンスの観点からは、インクリメンタル ビルドが有効になるので PreserveNewest をお勧めします。

<ItemGroup>
  <None Update="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

LinkBase

プロジェクト ディレクトリとそのサブディレクトリの外部にある項目の場合、発行先で項目のコピー先を決定するために、項目の Link メタデータが使用されます。 また、プロジェクト ツリーの外部にある項目が Visual Studio の [ソリューション エクスプローラー] ウィンドウにどのように表示されるかも、Link によって決定されます。

プロジェクト コーンの外部にある項目に対して Link が指定されていない場合は、既定で %(LinkBase)\%(RecursiveDir)%(Filename)%(Extension) になります。 LinkBase を使用して、プロジェクト コーンの外部の項目に適切なベース フォルダーを指定できます。 ベース フォルダーの下のフォルダー階層は、RecursiveDir によって保持されます。 LinkBase を指定しないと、それは Link パスから省略されます。

<ItemGroup>
  <Content Include="..\Extras\**\*.cs" LinkBase="Shared"/>
</ItemGroup>

次の図は、前の項目の Include glob によって含められるファイルがソリューション エクスプローラーにどのように表示されるかを示したものです。

LinkBase メタデータが指定された項目が表示されているソリューション エクスプローラー。

関連項目