次の方法で共有


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

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

Note

このページは進行中の作業であり、.NET SDK のすべての有用な MSBuild プロパティを一覧表示するわけではありません。 一般的な MSBuild プロパティの一覧については、「MSBuild プロジェクトの共通プロパティ」を参照してください。

アセンブリ検証プロパティ

これらのプロパティと項目は、 タスクに渡されます。 アセンブリの検証の詳細については、「アセンブリの検証」を参照してください。

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

  • ApiCompatStrictMode
  • ApiCompatValidateAssemblies

Note

これらのプロパティは、.NET SDK の一部ではありません (まだ)。 これらを使用するには、 に を追加する必要もあります。

さらに、「パッケージ検証プロパティ」に記載されている次のプロパティは、アセンブリの検証にも適用されます。

  • ApiCompatEnableRuleAttributesMustMatch
  • ApiCompatEnableRuleCannotChangeParameterName
  • ApiCompatExcludeAttributesFile
  • ApiCompatGenerateSuppressionFile
  • ApiCompatPermitUnnecessarySuppressions
  • ApiCompatPreserveUnnecessarySuppressions
  • ApiCompatRespectInternals
  • ApiCompatSuppressionFile
  • ApiCompatSuppressionOutputFile
  • NoWarn
  • RoslynAssembliesPath

ApiCompatStrictMode

プロパティに設定すると、API 互換性チェックをで実行する必要があることが プロパティにより指定されます。

<PropertyGroup>
  <ApiCompatStrictMode>true</ApiCompatStrictMode>
</PropertyGroup>

ApiCompatValidateAssemblies

プロパティを使用すると、指定したアセンブリに対して一連の検証を実行できます。 詳細については、「アセンブリ検証」を参照してください。

<PropertyGroup>
  <ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies>
</PropertyGroup>

アセンブリの属性プロパティ

  • GenerateAssemblyInfo
  • GeneratedAssemblyInfoFile
  • IncludeSourceRevisionInInformationalVersion
  • SourceRevisionId

GenerateAssemblyInfo

プロパティによってプロジェクトの 属性の生成を制御できます。 既定値は です。 ファイルの生成を無効にするには、 を使用します。

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

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

値が の場合、パッケージ関連のプロジェクト プロパティがアセンブリ属性に変換されます。

プロジェクト ファイルを使用してアセンブリ属性を生成する方法の詳細については、「プロジェクト ファイルでアセンブリ属性を設定する」を参照してください。

GeneratedAssemblyInfoFile

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

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

IncludeSourceRevisionInInformationalVersion

プロパティは、値を アセンブリ属性に追加するかどうかを制御します。 既定値は です。 この動作を無効にするには、 に設定します。

<PropertyGroup>
  <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>

詳細については、.NET SDK に含まれる Source Link を参照してください。

SourceRevisionId

プロパティは、Git コミット ハッシュなど、ビルドのソース管理リビジョン ID を保持します。 .NET 8 以降では、.NET SDK は、Source Link が存在する場合に、このプロパティにコミット ハッシュを自動的に設定します。 設定すると、その値が アセンブリ属性に追加されます。

<PropertyGroup>
  <SourceRevisionId>abc1234</SourceRevisionId>
</PropertyGroup>

詳細については、.NET SDK に含まれる Source Link を参照してください。

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

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

  • TargetFramework
  • TargetFrameworks
  • NetStandardImplicitPackageVersion

TargetFramework

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

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

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

TargetFrameworks

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

Note

(複数形) を指定した場合、 (単数形) は無視されます。

<PropertyGroup>
  <TargetFrameworks>net8.0;net462</TargetFrameworks>
</PropertyGroup>

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

NetStandardImplicitPackageVersion

Note

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

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

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

パッケージのプロパティ

  • 説明的なプロパティ
  • PackRelease

説明的なプロパティ

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

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

PackRelease

この プロパティは PublishRelease プロパティに似ていますが、既定の 動作が変更される点が異なります。 このプロパティは、.NET 7 で導入されました。

<PropertyGroup>
  <PackRelease>true</PackRelease>
</PropertyGroup>

Note

.NET 8 SDK 以降では、PackRelease の既定値は true です。 詳細については、「'dotnet pack' では Release 構成が使用される」を参照してください。

パッケージ検証プロパティ

これらのプロパティと項目は、 タスクに渡されます。 パッケージの検証の詳細については、「パッケージ検証の概要」を参照してください。

タスクのプロパティについては、「アセンブリ検証プロパティ」を参照してください。

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

  • ApiCompatEnableRuleAttributesMustMatch
  • ApiCompatEnableRuleCannotChangeParameterName
  • ApiCompatExcludeAttributesFile
  • ApiCompatGenerateSuppressionFile
  • ApiCompatPermitUnnecessarySuppressions
  • ApiCompatPreserveUnnecessarySuppressions
  • ApiCompatRespectInternals
  • ApiCompatSuppressionFile
  • ApiCompatSuppressionOutputFile
  • EnablePackageValidation
  • EnableStrictModeForBaselineValidation
  • EnableStrictModeForCompatibleFrameworksInPackage
  • EnableStrictModeForCompatibleTfms
  • NoWarn
  • PackageValidationBaselineFrameworkToIgnore
  • PackageValidationBaselineName
  • PackageValidationBaselineVersion
  • PackageValidationReferencePath
  • RoslynAssembliesPath

ApiCompatEnableRuleAttributesMustMatch

に設定すると、 プロパティによって、属性が一致するかどうかをチェックする検証規則が有効になります。 既定値は、 です。

<PropertyGroup>
  <ApiCompatEnableRuleAttributesMustMatch>true</ApiCompatEnableRuleAttributesMustMatch>
</PropertyGroup>

ApiCompatEnableRuleCannotChangeParameterName

に設定すると、 プロパティにより、パラメーター名がパブリック メソッドで変更されたかどうかを確認する検証規則が有効になります。 既定値は、 です。

<PropertyGroup>
  <ApiCompatEnableRuleCannotChangeParameterName>true</ApiCompatEnableRuleCannotChangeParameterName>
</PropertyGroup>

ApiCompatExcludeAttributesFile

項目は、DocId 形式で除外する属性を含むファイルへのパスを指定します。

<ItemGroup>
  <ApiCompatExcludeAttributesFile Include="ApiCompatExcludedAttributes.txt" />
  <ApiCompatExcludeAttributesFile Include="ApiCompatBaselineExcludedAttributes.txt" />
</ItemGroup>

ApiCompatGenerateSuppressionFile

プロパティにより、互換性抑制ファイルを生成するかどうかが指定されます。

<PropertyGroup>
  <ApiCompatGenerateSuppressionFile>true</ApiCompatGenerateSuppressionFile>
</PropertyGroup>

ApiCompatPermitUnnecessarySuppressions

プロパティにより、抑制ファイルで不要な抑制を許可するかどうかが指定されます。

既定値は、 です。

<PropertyGroup>
  <ApiCompatPermitUnnecessarySuppressions>true</ApiCompatPermitUnnecessarySuppressions>
</PropertyGroup>

ApiCompatPreserveUnnecessarySuppressions

プロパティにより、抑制ファイルを再生成するときに不要な抑制を保持するかどうかが指定されます。 既存の抑制ファイルが再生成されるときは、その内容が読み取られ、一連の抑制に逆シリアル化された後、リストに格納されます。 非互換性が修正されている場合、一部の抑制は不要になる可能性があります。 抑制をディスクにシリアル化し直す場合は、このプロパティを に設定することで、既存の (逆シリアル化された) 式を "すべて" 保持することができます。

既定値は、 です。

<PropertyGroup>
  <ApiCompatPreserveUnnecessarySuppressions>true</ApiCompatPreserveUnnecessarySuppressions>
</PropertyGroup>

ApiCompatRespectInternals

プロパティにより、 API に加えて、 API の互換性を確認する必要があるかどうかが指定されます。

<PropertyGroup>
  <ApiCompatRespectInternals>true</ApiCompatRespectInternals>
</PropertyGroup>

ApiCompatSuppressionFile

項目により、読み取る 1 つ以上の抑制ファイルへのパスが指定されます。 指定しない場合、抑制ファイル project-directory/CompatibilitySuppressions.xml が読み取られます (存在する場合)。

<ItemGroup>
  <ApiCompatSuppressionFile Include="CompatibilitySuppressions.xml;CompatibilitySuppressions.WasmThreads.xml" />
</ItemGroup>

ApiCompatSuppressionOutputFile

プロパティにより、 が の場合に書き込む抑制ファイルへのパスが指定されます。 指定しないと、最初の 項目が使われます。

EnablePackageValidation

プロパティを使用すると、 タスクの後にパッケージの一連の検証が有効になります。 詳細については、パッケージの検証に関する記事を参照してください。

<PropertyGroup>
  <EnablePackageValidation>true</EnablePackageValidation>
</PropertyGroup>

EnableStrictModeForBaselineValidation

に設定すると、 プロパティにより、パッケージのベースライン チェックの厳格モードが有効になります。 既定値は、 です。

EnableStrictModeForCompatibleFrameworksInPackage

に設定すると、 プロパティにより、ターゲット フレームワークに基づいて互換性のあるアセンブリの厳格モードが有効になります。 既定値は、 です。

EnableStrictModeForCompatibleTfms

に設定すると、 プロパティにより、互換性のあるすべてのターゲット フレームワークのコントラクトおよび実装アセンブリの厳格モードが有効になります。 既定値は、 です。

NoWarn

プロパティにより、抑制する診断 ID が指定されます。

<PropertyGroup>
  <NoWarn>$(NoWarn);PKV0001</NoWarn>
</PropertyGroup>

PackageValidationBaselineFrameworkToIgnore

項目により、ベースライン パッケージから無視するターゲット フレームワークが指定されます。 フレームワーク文字列は、ベースライン パッケージ内のフォルダー名と正確に一致する必要があります。

<ItemGroup>
  <PackageValidationBaselineFrameworkToIgnore Include="netcoreapp2.1" />
</ItemGroup>

PackageValidationBaselineName

プロパティにより、現在のパッケージを検証するベースライン パッケージの名前が指定されます。 指定しない場合は、 値が使用されます。

PackageValidationBaselineVersion

プロパティにより、現在のパッケージを検証するベースライン パッケージのバージョンが指定されます。

PackageValidationReferencePath

項目により、TFM ごとに参照アセンブリが見つかるディレクトリ パスが指定されます。

<ItemGroup>
  <PackageValidationReferencePath Include="path/to/reference-assembly" TargetFramework="net9.0" />
</ItemGroup>

RoslynAssembliesPath

プロパティにより、使用する Microsoft.CodeAnalysis アセンブリを含むディレクトリへのパスが指定されます。 このプロパティを設定する必要があるのは、SDK のコンパイラより新しいコンパイラでテストする場合のみです。

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

  • AppendRuntimeIdentifierToOutputPath
  • AppendTargetFrameworkToOutputPath
  • CopyLocalLockFileAssemblies
  • ErrorOnDuplicatePublishOutputFiles
  • GenerateRuntimeConfigDevFile
  • GenerateRuntimeConfigurationFiles
  • GenerateSatelliteAssembliesForCore
  • IsPublishable
  • PreserveCompilationContext
  • PreserveCompilationReferences
  • ProduceReferenceAssemblyInOutDir
  • PublishDocumentationFile
  • PublishDocumentationFiles
  • PublishReferencesDocumentationFiles
  • PublishReferencesSymbols
  • PublishRelease
  • PublishSelfContained
  • RollForward
  • RuntimeFrameworkVersion
  • RuntimeIdentifier
  • RuntimeIdentifiers
  • SatelliteResourceLanguages
  • SelfContained
  • UseAppHost

AppendTargetFrameworkToOutputPath

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

たとえば、.NET 5 アプリの場合、出力パスは次の設定で bin\Debug\net5.0 から bin\Debug に変わります。

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

AppendRuntimeIdentifierToOutputPath

プロパティは、ランタイム識別子 (RID) を出力パスに追加するかどうかを制御します。 .NET SDK によってターゲット フレームワークが自動的に追加され、存在する場合はランタイム識別子 (RID) が出力パスに追加されます。 を に設定すると、RID が出力パスに追加されなくなります。 (ただし、RID は 引き続き発行パスに追加されます。詳細については、 dotnet/sdk#12114 を参照してください)。

たとえば、.NET 9 アプリと win-x64 の RID の場合、次の設定では出力パスが bin\Debug\net9.0\win-x64 から bin\Debug\net9.0 に変更されます。

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

CopyLocalLockFileAssemblies

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

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

の既定値は、出力の種類によって異なる場合があります。 たとえば、クラス ライブラリの場合、既定値は 、コンソール アプリケーションの場合、既定値は 。 必要に応じて、このプロパティを明示的に指定して既定値をオーバーライドできます。

Tip

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

ErrorOnDuplicatePublishOutputFiles

プロパティは、MSBuild によって発行出力のファイル重複が検出されるが、削除するべきファイルを判断できないとき、SDK によってエラー NETSDK1148 が生成されるかどうかに関係します。 エラーを生成しない場合、 プロパティを に設定します。

<PropertyGroup>
  <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>

このプロパティは、.NET 6 で導入されました。

GenerateRuntimeConfigDevFile

.NET 6 SDK 以降では、[Appname].runtimesettings.dev.json ファイルはコンパイル時に既定で生成されなくなります。 このファイルを生成させる場合、 プロパティを に設定してください。

<PropertyGroup>
  <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>

GenerateRuntimeConfigurationFiles

プロパティによって、ランタイム構成オプションを runtimeconfig.template.json ファイルから [appname].runtimeconfig.json ファイルにコピーするかどうかを制御します。 runtimeconfig.json ファイルが必要なアプリの場合 (つまり、その が である場合)、このプロパティの既定値は です。

<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>

GenerateSatelliteAssembliesForCore

GenerateSatelliteAssembliesForCore プロパティは、.NET Framework プロジェクトでcsc.exe または Al.exe (アセンブリ リンカー) を使用してサテライト アセンブリを生成するかどうかを制御します。 (.NET Core および .NET 5 以上のプロジェクトでは、サテライト アセンブリを生成するために常に csc.exe を使用します)。.NET Framework プロジェクトの場合、サテライト アセンブリは既定で al.exe によって作成されます。 プロパティを に設定すると、代わりに csc.exe によってサテライト アセンブリが作成されます。 csc.exe を使うと、次の状況で有利になる場合があります。

  • C# コンパイラの オプションを使用する必要がある。
  • al.exe はパブリック署名をサポートせず、 を適切に処理できないという事実によって制限されている。
<PropertyGroup>
  <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>

IsPublishable

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

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

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

PreserveCompilationContext

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

この機能は、ほとんどの場合、Razor ファイルのランタイム コンパイルをサポートするために、MVC ページと Razor ページ ASP.NET Core内部で使用されます。

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

PreserveCompilationReferences

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

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

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

ProduceReferenceAssemblyInOutDir

.NET 5 以前のバージョンでは、参照アセンブリは常に OutDir ディレクトリに書き込まれます。 .NET 6 以降のバージョンでは、ProduceReferenceAssemblyInOutDir プロパティを使用して、参照アセンブリを OutDir ディレクトリに書き込むかどうかを制御できます。 既定値は で、参照アセンブリは ディレクトリにのみ書き込まれます。 参照アセンブリを ディレクトリに書き込むには、値を に設定します。

<PropertyGroup>
  <ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
</PropertyGroup>

詳細については、「中間出力への参照アセンブリの書き込み」を参照してください。

PublishDocumentationFile

このプロパティが の場合、プロジェクトの XML ドキュメント ファイルが (生成されていれば)、プロジェクトの発行出力に含まれます。 このプロパティでは、既定値が に設定されます。

Tip

コンパイル時に XML ドキュメント ファイルを生成するには、GenerateDocumentationFile を に設定します。

PublishDocumentationFiles

このプロパティは、さまざまな種類の XML ドキュメント ファイル (つまり PublishDocumentationFile や PublishReferencesDocumentationFiles) を既定で発行ディレクトリにコピーするかどうかを制御する他のいくつかのプロパティ用の有効化フラグです。 これらのプロパティが未設定で、このプロパティを設定すると、これらのプロパティは既定で になります。 このプロパティでは、既定値が に設定されます。

PublishReferencesDocumentationFiles

このプロパティを すると、プロジェクトの参照の XML ドキュメント ファイルは、DLL ファイルなどのランタイム資産だけでなく、発行ディレクトリにコピーされます。 このプロパティでは、既定値が に設定されます。

PublishReferencesSymbols

このプロパティが されると、プロジェクトの参照のシンボル ファイル (PDB ファイルとも呼ばれます) は、DLL ファイルなどのランタイム アセットだけでなく、発行ディレクトリにコピーされます。 このプロパティでは、既定値が に設定されます。

PublishRelease

この プロパティは、既定で 構成の代わりに 構成を使用するように に通知します。 このプロパティは、.NET 7 で導入されました。

<PropertyGroup>
  <PublishRelease>true</PublishRelease>
</PropertyGroup>

Note

  • .NET 8 SDK 以降では、 は、8 以降をターゲットとするプロジェクトでは既定で になります。 詳細については、「'dotnet publish' では Release 構成が使用される」を参照してください。
  • このプロパティは、dotnet build /t:Publish の動作には影響せず、.NET CLI を使用して発行する場合にのみ構成を変更します。

PublishSelfContained

プロパティは、としてアプリを発行するように に通知します。 このプロパティは、ソリューション レベルで発行する場合など、 コマンドに 引数を使用できない場合に便利です。 その場合は、 MSBuild プロパティをプロジェクトまたは Directory.Build.Props ファイルに追加できます。

このプロパティは、.NET 7 で導入されました。 これは、 動詞に固有である点を除いて、 プロパティに似ています。 の代わりに を使用することが推奨されます。

<PropertyGroup>
  <PublishSelfContained>true</PublishSelfContained>
</PropertyGroup>

RollForward

プロパティによって、複数のランタイム バージョンが利用できるときのアプリケーションによるランタイム選択方法が制御されます。 この値は .runtimeconfig.json に 設定として出力されます。

<PropertyGroup>
  <RollForward>LatestMinor</RollForward>
</PropertyGroup>

には、次のいずれかの値を選択します。

Value Description
Minor 指定されない場合は既定値。
要求されたマイナー バージョンがない場合は、次に利用可能な上位マイナー バージョン (およびそのマイナー バージョン内で使用可能な最高のパッチ バージョン) にロールフォワードします。 要求されたマイナー バージョンが存在する場合は、 ポリシーが使用されます。
Major 要求されたメジャー バージョンが見つからない場合は、次に利用可能な上位メジャー バージョン (使用可能な最小マイナー バージョンで、そのマイナー バージョン内で利用可能な最も高いパッチ バージョン) にロールフォワードします。 要求されたメジャー バージョンが存在する場合は、 ポリシーが使用されます。
LatestPatch 要求されたメジャー バージョンとマイナー バージョンで使用可能な最高のパッチ バージョンにロールフォワードします。 この値によって、マイナー バージョンのロールフォワードが無効になります。
LatestMinor 要求されたマイナー バージョンが存在する場合でも、要求されたメジャー バージョン (およびそのマイナー バージョン内で使用可能な最も高いパッチ バージョン) で使用可能な最高のマイナー バージョンにロールフォワードします。
LatestMajor 要求されたメジャーが存在する場合でも、使用可能なメジャー バージョン (およびそのメジャー バージョン内で使用可能なマイナーバージョンとパッチ バージョンの中で最も高いバージョン) にロールフォワードします。
Disable ロールフォワードせず、指定されたバージョンにバインドされるだけです。 このポリシーは、最新のパッチにロールフォワードする機能が無効になるため、一般的な使用にはお勧めできません。 この値はテスト用にのみ推奨されます。

詳細については、ロールフォワード動作の制御に関するページを参照してください。

RuntimeFrameworkVersion

プロパティによって、発行時に使用するランタイムのバージョンが指定されます。 ランタイム バージョンを指定する:

<PropertyGroup>
  <RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>

フレームワーク依存のアプリケーションを発行するとき、この値によって、必須の "最小" バージョンが指定されます。 自己完結型のアプリケーションを発行するとき、この値によって、必須となる "厳密な" バージョンが指定されます。

RuntimeIdentifier

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

<PropertyGroup>
  <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>

RuntimeIdentifiers

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

Tip

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

<PropertyGroup>
  <RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
</PropertyGroup>

SatelliteResourceLanguages

プロパティを使用すると、ビルドおよび発行時にサテライト リソース アセンブリを保持する言語を指定できます。 多くの NuGet パッケージには、そのメイン パッケージにローカライズされたリソース サテライト アセンブリが含まれています。 ローカライズされたリソースを必要としない NuGet パッケージを参照するプロジェクトの場合、ローカライズされたアセンブリによってビルドと発行の出力サイズが不必要に大きくなる可能性があります。 プロジェクト ファイルに プロパティを追加することで、指定した言語のローカライズされたアセンブリだけがビルドと発行の出力に含まれます。 たとえば、次のプロジェクト ファイルでは、英語 (米国) とドイツ語 (ドイツ) のリソース サテライト アセンブリだけが保持されます。

<PropertyGroup>
  <SatelliteResourceLanguages>en-US;de-DE</SatelliteResourceLanguages>
</PropertyGroup>

Note

  • このプロパティは、ローカライズされたリソース サテライト アセンブリを含む NuGet を参照するプロジェクトで指定する必要があります。

  • 引数 として複数の言語を指定するには、言語識別子を囲む引用符の "ペアを 3 つ" 追加する必要があります。 例えば次が挙げられます。

    dotnet msbuild multi.msbuildproj -p:SatelliteResourceLanguages="""de;en"""

SelfContained

プロパティは、 と に、自己完結型アプリとしてアプリをビルドまたは発行するように通知します。 このプロパティは、ソリューション レベルで発行する場合など、 コマンドで 引数を使用できない場合に便利です。 その場合は、 MSBuild プロパティをプロジェクトまたは Directory.Build.Props ファイルに追加できます。

このプロパティは、PublishSelfContained プロパティに似ています。 可能な限り の代わりに を使用することが推奨されます。

<PropertyGroup>
  <SelfContained>true</SelfContained>
</PropertyGroup>

UseAppHost

プロパティにより、デプロイ用にネイティブ実行可能ファイルを作成するかどうかが制御されます。 自己完結型の配置にはネイティブの実行可能ファイルが必要です。 フレームワークに依存する実行可能ファイルが既定で作成されます。 実行可能ファイルの生成を無効にするには、 プロパティを に設定します。

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

デプロイの詳細については、「.NET アプリケーションのデプロイ」を参照してください。

さまざまな MSBuild プロパティをトリミングの微調整に使用できます。これは、自己完結型の展開から未使用のコードをトリミングする機能です。 これらのオプションの詳細については、「トリミングのオプション」を参照してください。 次の表に、クイック リファレンスを示します。

Property Values Description
PublishTrimmed または 公開中にトリミングを有効にするかどうかを制御します。
TrimMode または 既定値は です。 トリミングの粒度を制御します。
SuppressTrimAnalysisWarnings または トリミング分析の警告を生成するかどうかを制御します。
EnableTrimAnalyzer または トリミング分析の警告のサブセットを生成するかどうかを制御します。 が に設定されている場合でも、分析を有効にすることができます。
ILLinkTreatWarningsAsErrors または トリミングの警告をエラーとして扱うかどうかを制御します。 たとえば、 が に設定されている場合は、このプロパティを に設定することができます。
TrimmerSingleWarn または アセンブリごとに 1 つの警告を表示するか、すべての警告を表示するかを制御します。
TrimmerRemoveSymbols または トリミングされたアプリケーションからすべてのシンボルを削除するかどうかを制御します。

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

  • ContinuousIntegrationBuild
  • CopyDebugSymbolFilesFromPackages
  • CopyDocumentationFilesFromPackages
  • DisableImplicitFrameworkDefines
  • DocumentationFile
  • EmbeddedResourceUseDependentUponConvention
  • EnablePreviewFeatures
  • EnableWindowsTargeting
  • GenerateDocumentationFile
  • GenerateRequiresPreviewFeaturesAttribute
  • OptimizeImplicitlyTriggeredBuild
  • DisableRuntimeMarshalling
  • BuildWithNetFrameworkHostedCompiler
  • RoslynCompilerType

や などの C# コンパイラ オプションは、プロジェクト ファイルの MSBuild プロパティとして指定することもできます。 詳細については、「C# コンパイラ オプション」を参照してください。

ContinuousIntegrationBuild

プロパティは、ビルドが継続的インテグレーション (CI) サーバー上で実行されているかどうかを示します。 に設定すると、このプロパティによって、開発者用マシン上のローカル ビルドではなく、公式ビルドにのみ適用される設定が有効になります。 たとえば、格納されたファイルのパスは公式ビルド用に正規化されます。 ただし、ローカル開発マシンでは、ファイル パスが正規化されている場合、デバッガーはローカル ソース ファイルを見つけることができません。

CI システムの変数を使って、 プロパティを条件付きで設定することができます。 たとえば、Azure Pipelinesの変数名は TF_BUILD です。

<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
  <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>

GitHub Actionsの場合、変数名は GITHUB_ACTIONS です。

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
  <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>

CopyDebugSymbolFilesFromPackages

このプロパティを に設定すると、プロジェクト内の 項目のすべてのシンボル ファイル (PDB ファイルとも呼ばれる) がビルド出力にコピーされます。 これらのファイルは、例外に関するより有益な情報を含むスタック トレースを提供し、実行中のアプリケーションのメモリ ダンプとトレースを理解しやすくします。 ただし、これらのファイルを含めると、デプロイ バンドルのサイズが大きくなります。

このプロパティは .NET SDK 7.0.100 で導入されましたが、既定では指定されていません。

CopyDocumentationFilesFromPackages

このプロパティを に設定すると、プロジェクト内の 項目のすべての生成された XML ドキュメント ファイルがビルド出力にコピーされます。 この機能を有効にすると、デプロイ バンドルのサイズが大きくなることに注意してください。

このプロパティは .NET SDK 7.0.100 で導入されましたが、既定では指定されていません。

DisableImplicitFrameworkDefines

DisableImplicitFrameworkDefines プロパティは、SDK が.NET プロジェクトのターゲット フレームワークとプラットフォームのプリプロセッサ シンボルを生成するかどうかを制御します。 このプロパティは に設定されているか、設定されていない (既定値) ときは、次のプリプロセッサ シンボルが生成されます。

  • バージョンのないフレームワーク (、、)
  • バージョンのあるフレームワーク (、、)
  • バージョンが最小バインドのフレームワーク (、、)

ターゲット フレームワーク モニカーとそれらのプリプロセッサ シンボルの詳細については、ターゲット フレームワークに関するページを参照してください。

また、プロジェクトでオペレーティング システム固有のターゲット フレームワーク (たとえば ) を指定する場合、次のプリプロセッサ シンボルが生成されます。

  • バージョンのないプラットフォーム (、、)
  • バージョンのあるプラットフォーム ()
  • バージョンが最小バインドのプラットフォーム ()

オペレーティング システム固有のターゲット フレームワーク モニカーの詳細については、OS 固有の TFM に関するセクションを参照してください。

最後に、ターゲット フレームワークが前のターゲット フレームワークのサポートを意味する場合は、それらの前のフレームワークのプリプロセッサ シンボルが生成されます。 たとえば、のサポートなど、に戻ります。 そのため、これらの各ターゲット フレームワークについて "バージョンが最小限にバインドされているフレームワーク" のシンボルが定義されます。

DocumentationFile

プロパティを使用すると、そのライブラリのドキュメントが含まれる XML ファイルのファイル名を指定できます。 IntelliSense がドキュメントで正しく機能するには、ファイル名がアセンブリ名と同じである必要があり、アセンブリと同じディレクトリにある必要があります。 このプロパティを指定せず、GenerateDocumentationFile を に設定すると、そのドキュメント ファイルの名前は既定でアセンブリの名前になりますが、ファイル拡張子は .xml になります。 このため、多くの場合はこのプロパティを省略し、代わりに GenerateDocumentationFile プロパティを使用する方が簡単です。

このプロパティを指定しても、GenerateDocumentationFile を に設定した場合は、そのコンパイラでドキュメント ファイルは生成 されません。 このプロパティを指定し、GenerateDocumentationFile プロパティを省略した場合は、そのコンパイラでドキュメント ファイルが生成 されます。

<PropertyGroup>
  <DocumentationFile>path/to/file.xml</DocumentationFile>
</PropertyGroup>

EmbeddedResourceUseDependentUponConvention

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

Note

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

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

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

EnablePreviewFeatures

プロパティによって、 属性で修飾されている API またはアセンブリにプロジェクトが依存するかどうかを定義します。 この属性は、API またはアセンブリによって、使用している SDK バージョンの "プレビュー段階" と見なされる機能が使われることを示す場合に使用されます。 プレビュー機能はサポートされておらず、将来のバージョンで削除される可能性があります。 プレビュー機能の使用を有効にするには、このプロパティを に設定します。

<PropertyGroup>
  <EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>

に設定されたこのプロパティがプロジェクトに含まれている場合、AssemblyInfo.cs ファイルに次のアセンブリ レベルの属性が追加されます。

[assembly: RequiresPreviewFeatures]

が に設定されていないプロジェクトの依存関係にこの属性が存在する場合、アナライザーによって警告が表示されます。

プレビュー アセンブリをリリースする予定のライブラリ作成者は、このプロパティを に設定する必要があります。 プレビューと非プレビューの API を組み合わせてアセンブリと共に出荷する必要がある場合は、以下の「GenerateRequiresPreviewFeaturesAttribute」セクションを参照してください。

EnableWindowsTargeting

EnableWindowsTargeting プロパティを true に設定して、Windows以外のプラットフォームでWindows アプリ (Windows フォーム アプリやWindows Presentation Foundation アプリなど) をビルドします。 このプロパティを に設定しないと、ビルド警告 NETSDK1100 が表示されます。 このエラーは、ターゲット パックやランタイム パックが、サポートされていないプラットフォームで自動的にダウンロードされていないことが原因で発生します。 このプロパティを設定すると、これらのパックはクロスターゲット時にダウンロードされます。

Note

現在、このプロパティは、Windows以外のプラットフォームでの開発を可能にするために推奨されています。 ただし、アプリケーションをリリースする準備ができたら、Windows上にビルドする必要があります。 Windows以外のプラットフォームでビルドする場合、出力が Windows 上でビルドする場合と同じにならない場合があります。 特に、実行可能ファイルはWindows アプリケーションとしてマークされず (つまり、常にコンソール ウィンドウを起動します)、アイコンは埋め込まれません。

<PropertyGroup>
  <EnableWindowsTargeting>true</EnableWindowsTargeting>
</PropertyGroup>

GenerateDocumentationFile

プロパティは、コンパイラでそのライブラリの XML ドキュメント ファイルが生成されるかどうかを制御します。 このプロパティを に設定し、DocumentationFile プロパティを使用してファイル名を指定しなかった場合、生成された XML ファイルはアセンブリと同じ出力ディレクトリに配置され、同じファイル名になります (ただし、拡張子は .xml になります)。

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

コード コメントからドキュメントを生成する方法の詳細については、 XML ドキュメント コメント (C#) XML (Visual Basic)、または XML (F#) でコードをドキュメント化する方法を参照してください。

GenerateRequiresPreviewFeaturesAttribute

プロパティは、EnablePreviewFeatures プロパティと密接に関連しています。 ライブラリでプレビュー機能を使用しているが、アセンブリ全体を 属性でマークしたくない場合 (すべてのコンシューマーがプレビュー機能を有効にする必要があります) は、このプロパティを に設定します。

<PropertyGroup>
    <EnablePreviewFeatures>True</EnablePreviewFeatures>
    <GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>

Important

プロパティを に設定する場合は、プレビュー機能に依存するすべてのパブリック API を で修飾する必要があります。

OptimizeImplicitlyTriggeredBuild

ビルド時間を短縮するために、null 許容分析を含むコード分析をスキップVisual Studioによって暗黙的にトリガーされるビルド。 Visual Studioは、たとえば、テストの実行時に暗黙的なビルドをトリガーします。 ただし、暗黙的なビルドは、 が ではない場合にのみ最適化されます。 を に設定したが、暗黙的にトリガーされるビルドを引き続き最適化したい場合は、 を に設定できます。 暗黙的にトリガーされるビルドに対してビルドの最適化を無効にする場合は、 を に設定します。

<PropertyGroup>
    <OptimizeImplicitlyTriggeredBuild>True</OptimizeImplicitlyTriggeredBuild>
</PropertyGroup>

DisableRuntimeMarshalling

プロパティを指定すると、プロジェクトのランタイム マーシャリング サポートを無効にすることができます。 このプロパティを に設定すると、 がアセンブリに追加され、P/Invoke またはデリゲート ベースの相互運用機能は、無効になっているランタイム マーシャリングの規則に従います。

<PropertyGroup>
    <DisableRuntimeMarshalling>True</DisableRuntimeMarshalling>
</PropertyGroup>

BuildWithNetFrameworkHostedCompiler

の指定は、を指定することと同じです。 詳細については、「 RoslynCompilerType」を参照してください。 を指定すると、への自動オプトインが行われないようにします。 を明示的に指定した場合、は効果がありません。

RoslynCompilerType

RoslynCompilerType プロパティは、C# または Visual Basic コンパイラのバージョンを制御します。 次の値が認識されます。

  • Core: .NET SDK に付属するコンパイラを使用します。 これは、.NET Framework MSBuild を使用する場合でも、.NET 10 であるための既定値です。
  • Framework: .NET Framework MSBuild に付属するコンパイラを使用します。
  • FrameworkPackage: .NET Framework MSBuild を使用する場合は、.NET SDK バージョンに対応する .NET Framework コンパイラでパッケージをダウンロードして使用します。

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

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

  • DefaultItemExcludesInProjectFolder
  • DefaultItemExcludes
  • EnableDefaultCompileItems
  • EnableDefaultEmbeddedResourceItems
  • EnableDefaultItems
  • EnableDefaultNoneItems

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

DefaultItemExcludes

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

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

Note

プロパティは、ファイルとフォルダーがによって監視されないように除外します。 詳細については、「から指定されたフォルダーとファイルを無視する」を参照してください。

DefaultItemExcludesInProjectFolder

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

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

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

EnableDefaultItems

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

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

EnableDefaultCompileItems

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

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

EnableDefaultEmbeddedResourceItems

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

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

EnableDefaultNoneItems

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

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

コード分析のプロパティ

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

  • AnalysisLevel
  • 分析レベルカテゴリ
  • AnalysisMode
  • AnalysisModeカテゴリ
  • CodeAnalysisTreatWarningsAsErrors
  • EnableNETAnalyzers
  • EnforceCodeStyleInBuild
  • _SkipUpgradeNetAnalyzersNuGetWarning

AnalysisLevel

AnalysisLevel プロパティを使用すると、.NET リリースに従って実行するコード アナライザーのセットを指定できます。 各.NETリリースには、一連のコード分析ルールがあります。 そのセットのうち、そのリリースで既定で有効になっているルールによって、コードが分析されます。 たとえば、.NET 8 から .NET 9 にアップグレードしても、コード分析規則の既定のセットを変更したくない場合は、AnalysisLevel8 に設定します。

<PropertyGroup>
  <AnalysisLevel>8</AnalysisLevel>
</PropertyGroup>

必要に応じて、このプロパティの複合値を指定して、ルールを有効にするアグレッシブな方法を指定することもできます。 複合値は、 という形式になります。ここで、 値は、AnalysisMode 値の 1 つです。 次の例では、コード アナライザーの バージョンを使用し、 ルールのセットを有効にします。

<PropertyGroup>
  <AnalysisLevel>preview-recommended</AnalysisLevel>
</PropertyGroup>

既定値:

  • プロジェクト.NET 5 以降を対象とする場合、または AnalysisMode プロパティを追加した場合、既定値は latest です。
  • それ以外の場合、このプロパティは、プロジェクト ファイルに明示的に追加されていない限り省略されます。

次の表は、指定できる値を示しています。

Value Meaning
latest リリースされている最新のコード アナライザーが使用されます。 既定値です。
latest-<mode> リリースされている最新のコード アナライザーが使用されます。 値によって、有効になる規則が決まります。
preview 最新のコード アナライザーが、プレビュー段階であっても使用されます。
preview-<mode> 最新のコード アナライザーが、プレビュー段階であっても使用されます。 値によって、有効になる規則が決まります。
10.0 .NET 10 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
10.0-<mode> .NET 10 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。
10 .NET 10 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
10-<mode> .NET 10 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。
9.0 .NET 9 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
9.0-<mode> .NET 9 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。
9 .NET 9 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
9-<mode> .NET 9 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。
8.0 .NET 8 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
8.0-<mode> .NET 8 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。
8 .NET 8 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。
8-<mode> .NET 8 リリースで使用できた一連のルールは、新しいルールが使用可能な場合でも使用されます。 値によって、有効になる規則が決まります。

Note

  • EnforceCodeStyleInBuild を に設定した場合、このプロパティは (コード品質規則に加えて) code-style (IDEXXXX) ルールに影響します。
  • に複合値を設定した場合、AnalysisMode を指定する必要はありません。 ただし、そのようにした場合、 が よりも優先されます。
  • このプロパティは、microsoft.CodeAnalysis.NetAnalyzers NuGet パッケージを参照する従来の .NET Framework プロジェクトなど、project SDK を参照しないプロジェクトのコード分析には影響しません。 詳細については、「 レガシ プロジェクトでコード分析を有効にする」を参照してください。

AnalysisLevelカテゴリ

このプロパティは、コード分析規則の特定のカテゴリにのみ適用される点を除いて、AnalysisLevel と同じです。 このプロパティを使用すると、特定のカテゴリに対して異なるバージョンのコード アナライザーを使用したり、他の規則カテゴリに対して異なるレベルの規則を有効または無効にしたりできます。 特定の規則カテゴリに対してこのプロパティを省略した場合、既定で AnalysisLevel 値に設定されます。 使用可能な値は、AnalysisLevel に使用できるものと同じです。

<PropertyGroup>
  <AnalysisLevelSecurity>preview</AnalysisLevelSecurity>
</PropertyGroup>
<PropertyGroup>
  <AnalysisLevelSecurity>preview-recommended</AnalysisLevelSecurity>
</PropertyGroup>

次の表は、各規則カテゴリのプロパティ名を示しています。

プロパティ名 ルール カテゴリ
<AnalysisLevelDesign> 設計規則
<AnalysisLevelDocumentation> ドキュメントルール
<AnalysisLevelGlobalization> グローバリゼーション ルール
<AnalysisLevelInteroperability> 移植性と相互運用性の規則
<AnalysisLevelMaintainability> 保守容易性ルール
<AnalysisLevelNaming> 名前付け規則
<AnalysisLevelPerformance> パフォーマンス ルール
<AnalysisLevelSingleFile> 単一ファイルのアプリケーション規則
<AnalysisLevelReliability> 信頼性規則
<AnalysisLevelSecurity> セキュリティ規則
<AnalysisLevelStyle> コード スタイル (IDEXXXX) 規則
<AnalysisLevelUsage> 使用規則

AnalysisMode

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

<PropertyGroup>
  <AnalysisMode>All</AnalysisMode>
</PropertyGroup>

次の表で利用可能なオプションの値について説明します。 これらは、有効になる規則の数に従って昇順に一覧表示されています。

Value Description
None すべてのルールが無効になっています。 個々の規則を選択的にオプトインして有効にすることができます。
Default 既定のモードでは、特定のルールがビルド警告として有効になり、特定のルールがVisual Studio IDE候補として有効になり、残りが無効になります。
Minimum モードよりも積極的なモード。 ビルドの実施のために強く推奨される特定の提案が、ビルドの警告として有効になります。 これに含まれる規則を確認するには、%ProgramFiles%/do tnet/sdk/[バージョン]/Sdks/Microsoft.NET を調べます。Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig ファイル。 (.NET 7 以前のバージョンの場合、ファイル拡張子は .editorconfig です)。
Recommended モードよりも積極的なモードであり、より多くの規則がビルド警告として有効になります。 これに含まれる規則を確認するには、%ProgramFiles%/do tnet/sdk/[バージョン]/Sdks/Microsoft.NET を調べます。Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig ファイル。 (.NET 7 以前のバージョンの場合、ファイル拡張子は .editorconfig です)。
All すべての規則がビルド警告として有効になっています。 個々のルールを選択的にオプトアウトして無効にすることができます。

* 次の規則は、 を に設定するか、 を に設定しても有効に "なりません": CA1017、CA1045、CA1005、CA1014、CA1060、CA1021、およびコード メトリック アナライザー規則 (CA1501、CA1502、CA1505、CA1506、CA1509)。 これらのレガシ規則は将来のバージョンで非推奨になる可能性があります。 ただし、 エントリを使って個別に有効にすることはできます。

Note

  • EnforceCodeStyleInBuild を に設定した場合、このプロパティは (コード品質規則に加えて) code-style (IDEXXXX) ルールに影響します。
  • AnalysisLevel に複合値 (例: ) を使用する場合は、このプロパティを完全に省略できます。 ただし、両方のプロパティを指定した場合は、 が よりも優先されます。

AnalysisModeカテゴリ

このプロパティは、コード分析規則の特定のカテゴリにのみ適用される点を除いて、AnalysisMode と同じです。 このプロパティを使用すると、他の規則カテゴリとは異なるレベルで規則を有効または無効にすることができます。 特定の規則カテゴリに対してこのプロパティを省略した場合、既定で AnalysisMode 値に設定されます。 使用可能な値は、AnalysisMode に使用できるものと同じです。

<PropertyGroup>
  <AnalysisModeSecurity>All</AnalysisModeSecurity>
</PropertyGroup>

次の表は、各規則カテゴリのプロパティ名を示しています。

プロパティ名 ルール カテゴリ
<AnalysisModeDesign> 設計規則
<AnalysisModeDocumentation> ドキュメントルール
<AnalysisModeGlobalization> グローバリゼーション ルール
<AnalysisModeInteroperability> 移植性と相互運用性の規則
<AnalysisModeMaintainability> 保守容易性ルール
<AnalysisModeNaming> 名前付け規則
<AnalysisModePerformance> パフォーマンス ルール
<AnalysisModeSingleFile> 単一ファイルのアプリケーション規則
<AnalysisModeReliability> 信頼性規則
<AnalysisModeSecurity> セキュリティ規則
<AnalysisModeStyle> コード スタイル (IDEXXXX) 規則
<AnalysisModeUsage> 使用規則

CodeAnalysisTreatWarningsAsErrors

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

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

EnableNETAnalyzers

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

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

Note

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

EnforceCodeStyleInBuild

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

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

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

_SkipUpgradeNetAnalyzersNuGetWarning

_SkipUpgradeNetAnalyzersNuGetWarning プロパティを使用すると、最新の .NET SDK のコード アナライザーと比較して古い NuGet パッケージのコード アナライザーを使用している場合に警告を受け取るかどうかを構成できます。 警告は次のように表示されます。

.NET SDK には、'Microsoft.CodeAnalysis.NetAnalyzers' パッケージのバージョン '5.0.3' よりもバージョン '6.0.0' の新しいアナライザーがあります。 Update or remove this package reference. (このパッケージ参照を更新または削除してください。)

この警告を削除して、NuGet パッケージのコード アナライザーのバージョンの使用を続けるには、プロジェクト ファイルで、 を に設定します。

<PropertyGroup>
  <_SkipUpgradeNetAnalyzersNuGetWarning>true</_SkipUpgradeNetAnalyzersNuGetWarning>
</PropertyGroup>

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

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

  • AutoreleasePoolSupport
  • ConcurrentGarbageCollection
  • InvariantGlobalization
  • PredefinedCulturesOnly
  • RetainVMGarbageCollection
  • ServerGarbageCollection
  • ThreadPoolMaxThreads
  • ThreadPoolMinThreads
  • TieredCompilation
  • TieredCompilationQuickJit
  • TieredCompilationQuickJitForLoops
  • TieredPGO
  • UseWindowsThreadPool

AutoreleasePoolSupport

プロパティは、サポートされている macOS プラットフォームで実行されたときに、各マネージド スレッドが暗黙的な NSAutoreleasePool を受け取るかどうかを構成します。 詳細については、「マネージド スレッドでの 」を参照してください。

<PropertyGroup>
  <AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>

ConcurrentGarbageCollection

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

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

InvariantGlobalization

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

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

PredefinedCulturesOnly

.NET 6 以降のバージョンでは、PredefinedCulturesOnly プロパティは、globalization-invariant mode が有効な場合に、アプリがインバリアント カルチャ以外のカルチャを作成できるかどうかを構成します。 既定値は、 です。 グローバリゼーション インバリアント モードで新しいカルチャの作成を許可するには、値を に設定します。

<PropertyGroup>
  <PredefinedCulturesOnly>false</PredefinedCulturesOnly>
</PropertyGroup>

詳細については、「グローバリゼーション インバリアント モードでのカルチャの作成とケース マッピング」を参照してください。

RetainVMGarbageCollection

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

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

ServerGarbageCollection

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

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

ThreadPoolMaxThreads

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

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

ThreadPoolMinThreads

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

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

TieredCompilation

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

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

TieredCompilationQuickJit

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

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

TieredCompilationQuickJitForLoops

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

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

TieredPGO

プロパティは、動的または階層化されたガイド付き最適化のプロファイル (PGO) を有効にするかどうかを制御します。 この値を に設定すると、階層化された PGO が有効になります。 詳細については、「ガイド付き最適化のプロファイル」を参照してください。

<PropertyGroup>
  <TieredPGO>true</TieredPGO>
</PropertyGroup>

UseWindowsThreadPool

UseWindowsThreadPool プロパティは、スレッド プールのスレッド管理をWindowsスレッド プールに委任するかどうかを構成します (Windowsのみ)。 既定値は false です。この場合、.NET スレッド プールが使用されます。 詳細については、「Windows スレッド プールを参照してください。

<PropertyGroup>
  <UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>

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

  • AssetTargetFallback
  • DisableImplicitFrameworkReferences
  • DisableTransitiveFrameworkReferenceDownloads
  • DisableTransitiveProjectReferences
  • ManagePackageVersionsCentrally
  • 復元関連のプロパティ
  • UseMauiEssentials
  • ValidateExecutableReferencesMatchSelfContained

AssetTargetFallback

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

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

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

DisableImplicitFrameworkReferences

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

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

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

DisableTransitiveFrameworkReferenceDownloads

プロパティを に設定して、プロジェクトによって直接参照されていない追加のランタイム パックやターゲット パックがダウンロードされないようにします。

<PropertyGroup>
  <DisableTransitiveFrameworkReferenceDownloads>true</DisableTransitiveFrameworkReferenceDownloads>
</PropertyGroup>

DisableTransitiveProjectReferences

プロパティにより、暗黙的なプロジェクト参照を制御できます。 暗黙的な の項目を無効にするには、このプロパティを に設定します。 暗黙的なプロジェクト参照を無効にすると、レガシ プロジェクト システムに似た非推移的な動作になります。

このプロパティを にすると、依存しているプロジェクトのすべての依存関係に対して を設定するのと同様の効果があります。

このプロパティを に設定すると、必要なプロジェクトだけに明示的な参照を追加できます。

<PropertyGroup>
  <DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>

ManagePackageVersionsCentrally

ManagePackageVersionsCentrally プロパティは、.NET 7 で導入されました。 リポジトリのルートにある ファイルでこれを に設定すると、プロジェクト内の共通の依存関係を 1 か所で管理できます。 ファイルの の項目を使って、共通のパッケージ依存関係のバージョンを追加します。 こうすると、個々のプロジェクト ファイルでは、一元管理されているパッケージを参照する 項目から 属性を省略できるようになります。

Directory.Packages.props ファイルの例:

<PropertyGroup>
  <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
...
<ItemGroup>
  <PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
</ItemGroup>

個々のプロジェクト ファイル:

<ItemGroup>
  <PackageReference Include="Microsoft.Extensions.Configuration" />
</ItemGroup>

詳細については、中央パッケージ管理 (CPM) に関する記事を参照してください。

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

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

UseMauiEssentials

プロパティを に設定して、MAUI Essentials に依存するプロジェクトまたはパッケージに明示的な参照を宣言します。 この設定により、MAUI Essentials の正しい既知のフレームワーク参照でプロジェクトが確実にプルされます。 プロジェクトが MAUI Essentials を使用するプロジェクトを参照しているが、このプロパティを に設定しない場合、ビルド警告 が発生する可能性があります。

<PropertyGroup>
  <UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>

ValidateExecutableReferencesMatchSelfContained

プロパティを使用して、実行可能なプロジェクト参照に関連するエラーを無効にできます。 自己完結型の実行可能プロジェクトがフレームワーク依存の実行可能プロジェクトを参照していることを検出.NET、またはその逆の場合は、エラー NETSDK1150とNETSDK1151が生成されます。 参照が意図的なものである場合にこのエラーを回避するには、 プロパティを に設定します。

<PropertyGroup>
  <ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup>

WindowsSdkPackageVersion

WindowsSdkPackageVersion プロパティを使用して、Windows SDK ターゲット パッケージのバージョンをオーバーライドできます。 このプロパティは、.NET 5 で導入され、この目的で FrameworkReference 項目の使用を置き換えます。

<PropertyGroup>
  <WindowsSdkPackageVersion>10.0.19041.18</WindowsSdkPackageVersion>
</PropertyGroup>

Note

Windows SDK ターゲット パッケージは .NET 5 以降の SDK に含まれているため、Windows SDK バージョンをオーバーライドすることはお勧めしません。 代わりに、最新の Windows SDK パッケージを参照するには、.NET SDK のバージョンを更新します。 このプロパティは、プレビュー パッケージを使用したり、C#/WinRT のバージョンをオーバーライドしたりするなど、まれな状況でのみ使用してください。

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

  • RunArguments
  • RunWorkingDirectory

RunArguments

プロパティは、実行時にアプリに渡される引数を定義します。

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

Tip

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

RunWorkingDirectory

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

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

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

  • SdkAnalysisLevel

SdkAnalysisLevel

.NET 9 で導入された SdkAnalysisLevel プロパティを使用して、sdk ツールのstrictを構成できます。 GLOBAL.JSONまたはその他の方法で SDK をピン留めできない場合に、SDK の警告レベルを管理するのに役立ちます。 このプロパティを使用すると、古い SDK をインストールしなくても、特定のツールや機能に関して古い SDK のように動作するように新しい SDK に指示できます。

このプロパティで使用できる値は、8.0.100 や 8.0.400 などの SDK 機能バンドです。 この値の既定値は、実行中の SDK の SDK 機能バンドです。 たとえば、SDK 9.0.102 の場合、使用する値は 9.0.100 です。 (.NET SDK のバージョン管理方法については、「.NETのバージョン管理方法を参照してください)。

<PropertyGroup>
  <SdkAnalysisLevel>8.0.400</SdkAnalysisLevel>
</PropertyGroup>

詳細については、「 SDK 分析レベルのプロパティと使用法を参照してください。

次の表は、 の影響を受ける診断と動作をまとめたものです。

SDKAnalysisLevel Description 更新された動作
9.0.100 HTTP ソースの復元の診断 NU1803 警告の代わりに NU1302 エラーを出力します。
10.0.100 '復元' パッケージの排除 PrunePackageReference は、8 以降または Standard 2.0 以降.NET対象のプロジェクト.NET既定で有効になっています。
10.0.100 ロック ファイルを含む '復元' リゾルバー レガシ依存関係グラフ リゾルバー (.NET 8 SDK 以前) の代わりに、改善された.NET 9 の依存関係グラフ リゾルバー を使用します。
10.0.100 バージョンのない PackageReference の '復元' 動作 NU1603 警告の代わりに NU1015 エラーを出力します。

Note

値によって有効になる動作は、3 つのメジャー リリース後に期限切れ (期限切れ) になります。 たとえば、バージョン 11.0.100 では、8.0.100 までの値のみが考慮されます。 バージョン 12.0.100 では、以前のバージョンでは、 値 8.0.100 を設定することで無効にできる機能は無効になります。

Microsoft.Testing.Platform に関連するプロパティ

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

  • IsTestingPlatformApplication
  • Enable[NugetPackageNameWithoutDots]
  • EnableAspireTesting
  • EnableMSTestRunner
  • EnableNUnitRunner
  • EnablePlaywright
  • GenerateTestingPlatformConfigurationFile
  • GenerateTestingPlatformEntryPoint
  • TestingExtensionsProfile
  • TestingPlatformCaptureOutput
  • TestingPlatformCommandLineArguments
  • TestingPlatformDotnetTestSupport
  • TestingPlatformShowTestsFailure
  • UseMicrosoftTestingPlatformRunner

IsTestingPlatformApplication

プロジェクトで Microsoft.Testing.Platform.MSBuild パッケージを参照する場合、 を (指定しない場合は既定値) に設定すると、次の処理が実行されます。

  • テスト プロジェクトへのエントリ ポイントを生成します。
  • 構成ファイルを生成します。
  • 拡張機能を検出します。

プロパティを に設定すると、パッケージへの推移的な依存関係が無効になります。 一時的な依存関係は特定のパッケージを参照する別のプロジェクトを参照するプロジェクトが、itがパッケージを参照しているかのように動作する場合です。 通常、このプロパティは、テスト プロジェクトを参照する非テスト プロジェクトで するように設定します。 詳細については、「 error CS8892を参照してください。

テスト プロジェクトが MSTest、NUnit、または xUnit を参照している場合、このプロパティは EnableMSTestRunner、 EnableNUnitRunner、または (xUnit の場合) と同じ値に設定されます。

Enable[NugetPackageNameWithoutDots]

Microsoft.Testing.Platform 拡張機能を有効または無効にするには、パターン のプロパティを使用します。

たとえば、クラッシュ ダンプ拡張機能 (NuGet パッケージ Microsoft.Testing.Extensions.CrashDump) を有効にするには、 を に設定します。

詳細については、「 拡張機能を有効または無効にするを参照してください。

EnableAspireTesting

MSTest プロジェクト SDK を使用する場合は、 プロパティを使用して、とでテストするために必要なすべての依存関係と既定の ディレクティブを取り込むことができます。 このプロパティは、MSTest 3.4 以降のバージョンで使用できます。

詳細については、「 熱望によるテスト」を参照してください。

EnablePlaywright

MSTest プロジェクト SDK を使用する場合は、 プロパティを使用して、とでテストするために必要なすべての依存関係と既定の ディレクティブを取り込むことができます。このプロパティは、MSTest 3.4 以降のバージョンで使用できます。

詳細については、「 Playwright」を参照してください。

EnableMSTestRunner

プロパティは、VSTest に代わる軽量で移植可能な Microsoft.Testing.Platform (MTP) の使用を有効または無効にします。 このプロパティは、MSTest 3.2 以降のバージョンで使用できます。

Note

プロジェクトで MSTest SDK を指定する場合は、このプロパティを設定する必要はありません。 これは自動的に設定されます。

EnableNUnitRunner

プロパティは、NUnit ランナーの使用を有効または無効にします。 NUnit ランナーは、VSTest の軽量で移植可能な代替手段です。 このプロパティは、バージョン 5.0 以降の NUnit3TestAdapter で使用できます。

UseMicrosoftTestingPlatformRunner

プロパティは、xUnit.v3 テスト プロジェクトでの Microsoft.Testing.Platform ランナーの使用を有効または無効にします。

GenerateTestingPlatformEntryPoint

プロパティを に設定すると、microsoft.Testing.Platform を使用するテスト プロジェクトのプログラム エントリ ポイント自動生成が無効になります。 このプロパティは、エントリ ポイントを手動で定義するとき、またはエントリ ポイントも含まれる実行可能ファイルからテスト プロジェクトを参照するときに、 に設定できます。

詳細については、「 error CS8892を参照してください。

VSTest プロジェクトのエントリ ポイントの生成を制御するには、 プロパティを使用します。

GenerateTestingPlatformConfigurationFile

プロパティは、IsTestingPlatformApplication がされている場合にのみ使用できます。 出力フォルダー内の 構成ファイル のコピーと名前の変更を許可するために使用されます。

TestingPlatformCaptureOutput

プロパティは、を使用してテストを実行するときに、テスト実行可能ファイルが書き込むすべてのコンソール出力をキャプチャして非表示にするかどうかを制御。 既定では、コンソール出力は非表示になっています。 この出力には、バナー、バージョン情報、および書式設定されたテスト情報が含まれます。 MSBuild 出力と共にこの情報を表示するには、このプロパティを に設定します。

詳細については、「 Show の完全なプラットフォーム出力を参照してください。

TestingPlatformCommandLineArguments

プロパティを使用すると、を使用してテストを実行するときに、テスト アプリにコマンド ライン引数指定できます。 次のプロジェクト ファイル スニペットは、例を示しています。

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

TestingPlatformDotnetTestSupport

プロパティを使用すると、の VSTest モードを使用する場合に Microsoft.Testing.Platform アプリをテストできます。

Note

VSTest プロジェクトと Microsoft.Testing.Platform プロジェクトの両方を含むソリューションでは、 を呼び出さないでください。そのシナリオはサポートされていないためです。

詳細については、「 dotnet test」を使用したテストを参照してください。

TestingPlatformShowTestsFailure

プロパティを使用すると、を使用してテストを実行するときに、単一のエラーまたは失敗したテストのすべてのエラーを報告するかどうかを制御できます。 デフォルトでは、テストの失敗は .log ファイルにまとめられ、テスト プロジェクトごとに 1 つの失敗が MSBuild に報告されます。 失敗したテストごとのエラーを表示するには、このプロパティをプロジェクト ファイルで に設定します。

TestingExtensionsProfile

MSTest プロジェクト SDK を使用すると、 プロパティを使用して、使用するプロファイルを選択できます。 次の表に、許容値を示します。

Value Description
Default このバージョンの MSTest.SDK に推奨される拡張機能を有効にします。
None 拡張機能は有効になっていません。
AllMicrosoft Microsoft から出荷されるすべての拡張機能 (制限付きライセンスを含む) を有効にします。

詳細については、「Microsoft.Testing.Platform プロファイルの」を参照してください。

VSTest 関連のプロパティ

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

  • IsTestProject
  • UseVSTest

IsTestProject

IsTestProject プロパティは、Microsoft.NET によって true に設定されます。Test.Sdk NuGet パッケージ。 プロジェクトが VSTest テスト プロジェクトであるかどうかを示し、 で認識されるようにします。

Note

プロジェクトで MSTest SDK を指定する場合は、MSTest.Sdk が Microsoft .NET を参照するため、このプロパティを設定する必要はありません。Test.Sdk NuGet パッケージ。

UseVSTest

を使用するときに、 プロパティを に設定して、Microsoft.Testing.Platform から VSTest ランナーに切り替えます。

MSTest 関連のプロパティ

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

  • MSTestAnalysisMode

MSTestAnalysisMode

このプロパティは、どのアナライザーがどの重大度で有効になっているかを決定します。 詳細については、MSTest コード分析 を参照してください。

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

  • AppHostDotNetSearch
  • AppHostRelativeDotNet
  • EnableComHosting
  • EnableDynamicLoading

AppHostDotNetSearch

AppHostDotNetSearch プロパティはアプリケーション用に生成されたネイティブ実行可能ファイルが.NETインストールを検索する方法を構成します。 このプロパティは、ビルドではなく、発行時に生成された実行可能ファイルにのみ影響します。

<PropertyGroup>
  <AppHostDotNetSearch>Global</AppHostDotNetSearch>
</PropertyGroup>

次の表に、有効な値を示します。 複数の値をセミコロンで区切って指定できます。

Value Meaning
AppLocal アプリの実行可能ファイルのフォルダー
AppRelative AppHostRelativeDotNet で指定されたアプリ実行可能ファイルに対する相対パス
EnvironmentVariable 環境変数の値
Global 登録 と 既定 グローバル インストールの場所

このプロパティは、.NET 9 で導入されました。

AppHostRelativeDotNet

AppHostRelativeDotNet プロパティを使用すると、構成時に.NETインストールを検索するアプリ実行可能ファイルの相対パスを指定できます。 プロパティを設定すると、が。 このプロパティは、ビルドではなく、発行時に生成された実行可能ファイルにのみ影響します。

<PropertyGroup>
  <AppHostRelativeDotNet>./relative/path/to/runtime</AppHostRelativeDotNet>
</PropertyGroup>

このプロパティは、.NET 9 で導入されました。

EnableComHosting

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

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

詳細については、「Expose .NET コンポーネントを COMする」を参照してください。

EnableDynamicLoading

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

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

生成されたファイルのプロパティ

次のプロパティは、生成されたファイルのコードに関するものです。

  • DisableImplicitNamespaceImports
  • ImplicitUsings

DisableImplicitNamespaceImports

DisableImplicitNamespaceImports プロパティを使用すると、6 以降のバージョンを対象とするVisual Basic プロジェクトで暗黙的な名前空間のインポート.NET無効にすることができます。 暗黙的な名前空間は、Visual Basic プロジェクトにグローバルにインポートされる既定の名前空間です。 暗黙的な名前空間のインポートを無効にするには、このプロパティを に設定します。

<PropertyGroup>
  <DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>

ImplicitUsings

ImplicitUsings プロパティを使用すると、6 以降のバージョンと C# 10 以降のバージョンを対象とする C# プロジェクトで暗黙的な global using ディレクティブ.NET有効または無効にすることができます。 この機能を有効にすると、.NET SDK は、プロジェクト SDK の種類に基づいて、一連の既定の名前空間に対して global using ディレクティブを追加します。 暗黙的な ディレクティブを有効にするには、このプロパティを または に設定します。 暗黙的な ディレクティブを無効にするには、このプロパティを削除するか、 または に設定します。

<PropertyGroup>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Note

.NET 6 以降をターゲットとする新しい C# プロジェクトのテンプレートは、既定で ImplicitUsingsenable に設定されています。

明示的な ディレクティブを定義するには、Using 項目を追加します。

Items

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

  • AssemblyMetadata
  • InternalsVisibleTo
  • PackageReference
  • TrimmerRootAssembly
  • Using

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

AssemblyMetadata

項目によって、キーと値のペアの アセンブリ属性を指定します。 メタデータがキーになり、 メタデータが値になります。

<ItemGroup>
  <AssemblyMetadata Include="Serviceable" Value="True" />
</ItemGroup>

InternalsVisibleTo

項目によって、指定されたフレンド アセンブリの アセンブリ属性を生成します。

<ItemGroup>
  <InternalsVisibleTo Include="MyProject.Tests" />
</ItemGroup>

フレンド アセンブリが署名されている場合は、省略可能な メタデータを指定して、その完全な公開キーを指定できます。 メタデータを指定しておらず、 が使用可能な場合は、そのキーが使用されます。 それ以外の場合、属性に公開キーは追加されません。

FrameworkReference

FrameworkReference 項目は、.NET共有フレームワークへの参照を定義します。

属性は、フレームワーク ID を指定します。

次の例のプロジェクト ファイル スニペットは、Microsoft.AspNetCore.App 共有フレームワークを参照しています。

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

PackageReference

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

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

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

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

などのメタデータを使用してすることもできます。

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

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

TrimmerRootAssembly

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

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

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

詳細については、「トリミングのオプション」を参照してください。

Using

項目を使用すると、C# プロジェクト全体で名前空間をグローバルに含めることができるので、ソース ファイルの先頭に名前空間の ディレクティブを追加する必要はありません。 この項目は、Visual Basic プロジェクトで同じ目的で使用できる Import 項目に似ています。 このプロパティは、.NET 6 以降で使用できます。

<ItemGroup>
  <Using Include="My.Awesome.Namespace" />
</ItemGroup>

また、 項目を使用して、グローバルな および ディレクティブを定義することもできます。

<ItemGroup>
  <Using Include="My.Awesome.Namespace" Alias="Awesome" />
</ItemGroup>

例えば次が挙げられます。

  • により、 が生成されます
  • により、 が生成されます

詳細については、エイリアス化された ディレクティブ と ディレクティブを参照してください。

項目のメタデータ

標準の MSBuild 項目属性に加えて、.NET SDK では次の項目メタデータ タグを使用できます。

  • CopyToPublishDirectory
  • LinkBase

CopyToPublishDirectory

MSBuild 項目の メタデータにより、項目が発行ディレクトリにコピーされるタイミングが制御されます。 次の表に、許容値を示します。

Value Description
PreserveNewest ソースの場所でアイテムが変更された場合にのみ、アイテムをコピーします。
IfDifferent ソースまたはターゲットの場所でアイテムが変更された場合にのみ、アイテムをコピーします。 この設定は、発行後に発生する変更をリセットする必要がある場合に役立ちます。
Always 常にアイテムをコピーします。
Never アイテムをコピーしません。

パフォーマンスの観点からは、インクリメンタル ビルドが有効になるので をお勧めします。 代わりに を使用せず、 を使用すると、I/O 書き込みが無効になります。

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

LinkBase

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

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

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

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

ソリューション エクスプローラー LinkBase metadata.

こちらも参照ください

  • MSBuild スキーマ リファレンス
  • MSBuild の共通プロパティ
  • NuGet pack の MSBuild プロパティ
  • NuGet restore の MSBuild プロパティ
  • ビルドのカスタマイズ