.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 を使用するには、プロジェクト ファイルを構成します。

.NET 5.0

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

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

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

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

</Project>

.NET Core 3.1

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

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

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.1</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 (またはその他の言語拡張) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/A
EmbeddedResource **/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/A
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 デスクトップ SDK が自動的にインポートされます。

.NET Core 3.1 のプロジェクトの場合、このプロパティを使用するには .NET デスクトップ 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 デスクトップ SDK が自動的にインポートされます。

.NET Core 3.1 のプロジェクトの場合、このプロパティを使用するには .NET デスクトップ SDK を明示的にターゲットとする必要があります。

共有設定

DisableWinExeOutputInference

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

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

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

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

関連項目