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

このページは、.NET デスクトップ SDK で Windows フォーム (WinForms) および Windows Presentation Foundation (WPF) プロジェクトを構成するために使用する MSBuild のプロパティと項目についてのリファレンスです。

注意

この記事では、デスクトップ アプリに関連する .NET SDK の MSBuild プロパティのサブセットについて説明します。 .NET SDK 固有の一般的な MSBuild プロパティの一覧については、「.NET SDK プロジェクトの MSBuild リファレンス」を参照してください。 一般的な MSBuild プロパティの一覧については、「MSBuild プロジェクトの共通プロパティ」を参照してください。

.NET デスクトップ SDK を有効にする

WinForms または WPF を使用するには、WinForms または WPF プロジェクトのプロジェクト ファイルで次の設定を指定します。

  • .NET SDK Microsoft.NET.Sdk をターゲットとする。 詳細については、「プロジェクト ファイル」を参照してください。
  • などの net8.0-windowsWindows 固有のターゲット フレームワーク モニカーに設定TargetFrameworkします。
  • UI フレームワーク プロパティ (または必要に応じて両方) を追加します。
    • WPF をインポートして使用する場合は、UseWPFtrue に設定する。
    • WinForms をインポートして使用する場合は、UseWindowsFormstrue に設定する。
  • (省略可能) OutputTypeWinExe に設定する。 この設定では、ライブラリではなくアプリが生成されます。 ライブラリを生成する場合は、このプロパティを省略してください。
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>

    <UseWPF>true</UseWPF>
    <!-- and/or -->
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

</Project>

WPF に既定で含まれるものと除外されるもの

SDK プロジェクトでは、プロジェクトからファイルを暗黙的に含めるまたは除外する規則のセットを定義します。 これらの規則により、ファイルのビルド アクションも自動的に設定されます。 この動作は、既定のインクルードまたは除外ルールがない古い SDK 以外の .NET Framework プロジェクトとは異なります。 .NET Framework プロジェクトでは、プロジェクトに含めるファイルを明示的に宣言する必要があります。

.NET プロジェクト ファイルには、ファイルを自動的に処理するための規則の標準セットが含まれています。 WPF プロジェクトではさらに規則を追加します。

次の表には、UseWPF プロジェクト プロパティが true に設定されている場合に、.NET デスクトップ SDK に含まれる、および除外される要素と glob が示されています。

要素 含まれる glob 除外される glob glob の削除
ApplicationDefinition App.xaml または Application.xaml 該当なし 該当なし
Page **/*.xaml **/*.user; **/*.*proj; **/*.sln; **/*.vssscc
ApplicationDefinition によって定義されたすべての XAML
該当なし
None 該当なし 該当なし **/*.xaml

以下は、すべてのプロジェクトの種類について、既定で含まれるものと除外されるものの設定です。 詳細については、「既定で含まれるものと除外されるもの」を参照してください。

要素 含まれる glob 除外される glob glob の削除
Compile **/*.cs; **/*.vb (or other language extensions) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc 該当なし
EmbeddedResource **/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc 該当なし
None **/* **/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx

ファイルをプロジェクトに明示的に追加した場合、またはプロジェクトにファイルを自動的に含めるように XAML glob が設定されている場合は、次のいずれかのエラーが発生する可能性があります。

  • 重複する 'ApplicationDefinition' 項目が含まれていました。
  • 重複する 'Page' 項目が含まれていました。

これらのエラーは、ご自分の設定と競合する暗黙的な "含まれる" glob の結果です。 この問題を回避するには、EnableDefaultApplicationDefinition または EnableDefaultPageItemsfalse に設定します。 これらの値を設定すると false 、プロジェクトに含める既定の glob またはファイルを明示的に定義する必要があった以前の SDK の動作に戻ります。

EnableDefaultItems プロパティfalse に設定することにより、暗黙的な含まれるものを完全に無効にすることができます。

WPF の設定

WPF 固有ではないプロジェクト設定については、「.NET SDK プロジェクトの MSBuild リファレンス」を参照してください。

UseWPF

UseWPF プロパティにより、WPF ライブラリへの参照を含めるかどうかが制御されます。 この設定では、WPF プロジェクトと関連ファイルを正しく処理するように MSBuild パイプラインも変更されます。 既定値は false です。 UseWPF プロパティを true に設定して、WPF のサポートを有効にします。 このプロパティが有効になっている場合にのみ、Windows プラットフォームをターゲットにすることができます。

<PropertyGroup>
  <UseWPF>true</UseWPF>
</PropertyGroup>

このプロパティがtrue設定されている場合、.NET 5 以降のプロジェクトは .NET Desktop SDK を自動的にインポートします。

EnableDefaultApplicationDefinition

EnableDefaultApplicationDefinition プロパティにより、ApplicationDefinition 項目がプロジェクトに暗黙的に含まれるかどうかが制御されます。 既定値は true です。 EnableDefaultApplicationDefinition プロパティを false に設定して、暗黙的なファイルの組み込みを無効にします。

<PropertyGroup>
  <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
</PropertyGroup>

このプロパティは、EnableDefaultItems プロパティtrue (既定の設定) に設定されている必要があります。

EnableDefaultPageItems

EnableDefaultPageItems プロパティにより、 .xaml ファイルである Page 項目がプロジェクトに暗黙的に含まれるかどうかが制御されます。 既定値は true です。 EnableDefaultPageItems プロパティを false に設定して、暗黙的なファイルの組み込みを無効にします。

<PropertyGroup>
  <EnableDefaultPageItems>false</EnableDefaultPageItems>
</PropertyGroup>

このプロパティは、EnableDefaultItems プロパティtrue (既定の設定) に設定されている必要があります。

Windows フォームの設定

WinForms 固有ではないプロジェクト プロパティについては、「.NET SDK プロジェクトの MSBuild リファレンス」を参照してください。

ApplicationDefaultFont

ApplicationDefaultFont プロパティによって、アプリケーション全体に適用されるカスタム フォント情報が指定されます。 これにより、ソースで生成された ApplicationConfiguration.Initialize() API が Application.SetDefaultFont(Font) メソッドへの呼び出しを生成するかどうかが制御されます。 既定値は空の文字列で、これはアプリケーションの既定のフォントが Control.DefaultFont プロパティから取得されることを意味します。

空でない値は、インバリアント カルチャ (つまり、リストの区切り記号 = , と少数桁の区切り文字 = .) で呼び出される FontConverter.ConvertTo メソッドの出力と同じ形式に準拠している必要があります。 形式は name, size[units[, style=style1[, style2, ...]]] です。

<PropertyGroup>
  <ApplicationDefaultFont>Calibri, 11pt, style=regular</ApplicationDefaultFont>
</PropertyGroup>

このプロパティは、.NET 6 以降のバージョンと Visual Studio 2022 以降のバージョンでサポートされています。

ApplicationHighDpiMode

ApplicationHighDpiMode プロパティによって、高 DPI モードのアプリケーション全体の既定値が指定されます。 これにより、ソースで生成された ApplicationConfiguration.Initialize() API によって生成される Application.SetHighDpiMode(HighDpiMode) メソッドの引数が制御されます。 既定値は SystemAware です。

<PropertyGroup>
  <ApplicationHighDpiMode>PerMonitorV2</ApplicationHighDpiMode>
</PropertyGroup>

ApplicationHighDpiMode は、いずれかの HighDpiMode 列挙値に設定できます。

説明
DpiUnaware アプリケーション ウィンドウは DPI の変更に合わせてスケーリングせず、常に 100% の倍率を想定します。
DpiUnawareGdiScaled DpiUnaware に似ていますが、GDI/GDI+ ベースのコンテンツの品質が向上します。
PerMonitor このウィンドウでは、作成時に DPI が確認され、DPI が変化したときに倍率が調整されます。
PerMonitorV2 PerMonitor に似ていますが、子ウィンドウの DPI 変更通知、comctl32.dll コントロールの拡大縮小の改善、およびダイアログの拡大縮小を使用できます。
SystemAware 指定されない場合は既定値
ウィンドウはプライマリ モニターの DPI を 1 回照会し、すべてのモニター上のアプリケーションに対してこの値を使用します。

このプロパティは、.NET 6 以降のバージョンでサポートされます。

ApplicationUseCompatibleTextRendering

ApplicationUseCompatibleTextRendering プロパティによって、特定のコントロールで定義された UseCompatibleTextRendering プロパティにアプリケーション全体で有効な既定値が指定されます。 これにより、ソースで生成された ApplicationConfiguration.Initialize() API によって生成される Application.SetCompatibleTextRenderingDefault(Boolean) メソッドの引数が制御されます。 既定値は false です。

<PropertyGroup>
  <ApplicationUseCompatibleTextRendering>true</ApplicationUseCompatibleTextRendering>
</PropertyGroup>

このプロパティは、.NET 6 以降のバージョンでサポートされます。

ApplicationVisualStyles

ApplicationVisualStyles プロパティによって、視覚スタイルを実現するためのアプリケーション全体の既定値が指定されます。 これにより、ソースで生成された ApplicationConfiguration.Initialize() API が Application.EnableVisualStyles() への呼び出しを生成するかどうかが制御されます。 既定値は true です。

<PropertyGroup>
  <ApplicationVisualStyles>true</ApplicationVisualStyles>
</PropertyGroup>

このプロパティは、.NET 6 以降のバージョンでサポートされます。

UseWindowsForms

UseWindowsForms プロパティにより、Windows フォームをターゲットとするようにアプリケーションがビルドされるかどうかが制御されます。 このプロパティにより、Windows フォーム プロジェクトと関連ファイルを正しく処理するために MSBuild パイプラインが変更されます。 既定値は false です。 UseWindowsForms プロパティを true に設定して、Windows フォームのサポートを有効にします。 この設定が有効になっている場合にのみ、Windows プラットフォームをターゲットにすることができます。

<PropertyGroup>
  <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>

このプロパティがtrue設定されている場合、.NET 5 以降のプロジェクトは .NET Desktop SDK を自動的にインポートします。

共有設定

DisableWinExeOutputInference

.NET 5 SDK 以降に適用されます。

アプリで OutputType プロパティに対して Exe 値が設定されているときに、そのアプリがコンソールから実行されていない場合はコンソール ウィンドウが作成されます。 この動作は、通常、Windows デスクトップ アプリでは望ましくありません。 WinExe 値を使用すると、コンソール ウィンドウは作成されません。 .NET 5 SDK 以降では、Exe 値が WinExe に自動的に変換されます。

DisableWinExeOutputInference プロパティは、ExeWinExe として扱う動作を元に戻します。 この値を true に設定して、ExeOutputType プロパティ値の動作を復元します。 既定値は false です。

<PropertyGroup>
  <DisableWinExeOutputInference>true</DisableWinExeOutputInference>
</PropertyGroup>

関連項目