Informazioni di riferimento su MSBuild per i progetti .NET Desktop SDK

Questa pagina è un riferimento per le proprietà e gli elementi di MSBuild usati per configurare progetti Windows Form (WinForms) e Windows Presentation Foundation (WPF) con .NET Desktop SDK.

Nota

Questo articolo illustra un subset delle proprietà di MSBuild per .NET SDK in relazione alle app desktop. Per un elenco delle proprietà MSBuild comuni specifiche di .NET SDK, vedere informazioni di riferimento su MSBuild per i progetti .NET SDK. Per un elenco delle proprietà comuni di MSBuild, vedere Proprietà comuni di MSBuild.

Abilitare .NET Desktop SDK

Per usare WinForms o WPF, specificare le impostazioni seguenti nel file di progetto del progetto WinForms o WPF:

<Project Sdk="Microsoft.NET.Sdk">

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

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

</Project>

L'impostazione predefinita di WPF include ed esclude

I progetti SDK definiscono un set di regole per includere o escludere in modo implicito i file dal progetto. Queste regole impostano automaticamente anche l'azione di compilazione del file. Questo comportamento è diverso dai progetti .NET Framework non SDK meno recenti, che non hanno regole predefinite di inclusione o esclusione. I progetti .NET Framework richiedono di dichiarare in modo esplicito i file da includere nel progetto.

I file di progetto .NET includono un set standard di regole per l'elaborazione automatica dei file. I progetti WPF aggiungono regole aggiuntive.

La tabella seguente illustra quali elementi e glob sono inclusi ed esclusi in .NET Desktop SDK quando la proprietà del progetto UseWPF è impostata su true:

Elemento GLOB Include GLOB Exclude GLOB Remove
ApplicationDefinition App.xaml oppure Application.xaml N/D N/D
Page **/*.xaml **/*.user; **/*.*proj; **/*.sln; **/*.vssscc
Qualsiasi XAML definito da ApplicationDefinition
N/D
None N/D N/D **/*.xaml

Ecco le impostazioni predefinite di inclusione ed esclusione per tutti i tipi di progetto. Per altre informazioni, vedere Inclusioni ed esclusioni predefinite.

Elemento GLOB Include GLOB Exclude GLOB Remove
Compile **/*.Cs; **/*.vb (o altre estensioni del linguaggio) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/D
EmbeddedResource **/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/D
None **/* **/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx

Se i file sono stati aggiunti esplicitamente al progetto o se i globi XAML includono automaticamente i file nel progetto, è possibile che si verifichi uno dei seguenti errori:

  • Sono stati inclusi elementi 'ApplicationDefinition' duplicati.
  • Sono stati inclusi elementi 'Page' duplicati.

Questi errori sono il risultato di un conflitto tra i globi impliciti Include e le impostazioni. Per risolvere il problema, impostare EnableDefaultApplicationDefinition o EnableDefaultPageItems su false. L'impostazione di questi valori per false ripristinare il comportamento degli SDK precedenti in cui è necessario definire in modo esplicito i glob predefiniti o i file da includere nel progetto.

È possibile disabilitare completamente tutte le include implicite impostando la proprietà EnableDefaultItems su false.

Impostazioni WPF

Per informazioni sulle impostazioni del progetto non specifiche di WPF, vedere informazioni di riferimento su MSBuild per i progetti .NET SDK.

UseWPF

La proprietà UseWPF controlla se includere o meno riferimenti alle librerie WPF. Questa impostazione modifica anche la pipeline MSBuild per elaborare correttamente un progetto WPF e i file correlati. Il valore predefinito è false. Impostare la proprietà UseWPF su true per abilitare il supporto WPF. È possibile specificare come destinazione la piattaforma Windows solo quando questa proprietà è abilitata.

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

Quando questa proprietà è impostata su true, i progetti .NET 5+ importano automaticamente .NET Desktop SDK.

EnableDefaultApplicationDefinition

La proprietà EnableDefaultApplicationDefinition controlla se gli elementi ApplicationDefinition vengono inclusi in modo implicito nel progetto. Il valore predefinito è true. Impostare la proprietà EnableDefaultApplicationDefinition su false per disabilitare l'inclusione implicita del file.

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

Questa proprietà richiede che la proprietà EnableDefaultItems sia impostata su true, ovvero l'impostazione predefinita.

EnableDefaultPageItems

La proprietà EnableDefaultPageItems controlla se gli elementi Page, che sono filexaml, vengono inclusi in modo implicito nel progetto. Il valore predefinito è true. Impostare la proprietà EnableDefaultPageItems su false per disabilitare l'inclusione implicita del file.

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

Questa proprietà richiede che la proprietà EnableDefaultItems sia impostata su true, ovvero l'impostazione predefinita.

Impostazioni di Windows Form

Per informazioni sulle proprietà del progetto non specifiche di WinForms, vedere informazioni di riferimento su MSBuild per i progetti .NET SDK.

ApplicationDefaultFont

La proprietà ApplicationDefaultFont specifica informazioni sul tipo di carattere personalizzate da applicare a livello di applicazione. Controlla se l'API ApplicationConfiguration.Initialize() generata dall'origine genera o meno una chiamata al metodo Application.SetDefaultFont(Font). Il valore predefinito è una stringa vuota e significa che il tipo di carattere predefinito dell'applicazione viene originato dalla proprietà Control.DefaultFont.

Un valore non vuoto deve essere conforme a un formato equivalente all'output del metodo FontConverter.ConvertTo richiamato con le impostazioni cultura invarianti, ovvero separatore di elenco=, e separatore decimale=.. Il formato è: name, size[units[, style=style1[, style2, ...]]].

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

Questa proprietà è supportata da .NET 6 e versioni successive e Da Visual Studio 2022 e versioni successive.

ApplicationHighDpiMode

La proprietà ApplicationHighDpiMode specifica il valore predefinito a livello di applicazione per la modalità DPI elevata. Controlla l'argomento del metodo Application.SetHighDpiMode(HighDpiMode) generato dall'API di ApplicationConfiguration.Initialize() generata dall'origine. Il valore predefinito è SystemAware.

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

ApplicationHighDpiMode può essere impostato su uno dei valori di enumerazione HighDpiMode:

Valore Descrizione
DpiUnaware La finestra dell'applicazione non viene ridimensionata per le modifiche dpi e presuppone sempre un fattore di scala pari al 100%.
DpiUnawareGdiScaled Simile a DpiUnaware, ma migliora la qualità del contenuto basato su GDI/GDI+.
PerMonitor La finestra verifica il valore DPI quando viene creato e, quando viene modificato, regola il fattore di scala.
PerMonitorV2 Simile a PerMonitor, ma abilita la notifica delle modifiche del valore DPI della finestra figlio, la scalabilità migliorata dei controlli comctl32 e il ridimensionamento della finestra di dialogo.
SystemAware Valore predefinito se non viene specificato.
La finestra esegue una query sulla DPI del monitoraggio primario una sola volta e usa questo valore per l'applicazione su tutti i monitor.

Questa proprietà è supportata da .NET 6 e versioni successive.

ApplicationUseCompatibleTextRendering

La proprietà ApplicationUseCompatibleTextRendering specifica l'impostazione predefinita a livello di applicazione per la proprietà UseCompatibleTextRendering definita in determinati controlli. Controlla l'argomento del metodo Application.SetCompatibleTextRenderingDefault(Boolean) generato dall'API ApplicationConfiguration.Initialize() generata dall'origine. Il valore predefinito è false.

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

Questa proprietà è supportata da .NET 6 e versioni successive.

ApplicationVisualStyles

La proprietà ApplicationVisualStyles specifica l'impostazione predefinita a livello di applicazione per l'abilitazione degli stili di visualizzazione. Controlla se l'API di ApplicationConfiguration.Initialize() generata dall'origine genera una chiamata a Application.EnableVisualStyles(). Il valore predefinito è true.

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

Questa proprietà è supportata da .NET 6 e versioni successive.

UseWindowsForms

La proprietà UseWindowsForms controlla se l'applicazione è compilata o meno come destinazione di Windows Form. Questa proprietà modifica la pipeline MSBuild per elaborare correttamente un progetto Windows Form e i file correlati. Il valore predefinito è false. Impostare la proprietà UseWindowsForms su true per abilitare il supporto di Windows Form. È possibile specificare come destinazione la piattaforma Windows solo quando questa impostazione è abilitata.

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

Quando questa proprietà è impostata su true, i progetti .NET 5+ importano automaticamente .NET Desktop SDK.

Impostazioni condivise

DisableWinExeOutputInference

Si applica a .NET 5 SDK e versioni successive.

Quando un'app ha il valore Exe impostato per la proprietà OutputType, viene creata una finestra della console se l'app non è in esecuzione da una console. Questo comportamento in genere non è auspicabile per un'app desktop di Windows. Con il valore WinExe, non viene creata una finestra della console. A partire da .NET 5 SDK, il valore Exe viene trasformato automaticamente in WinExe.

La proprietà DisableWinExeOutputInference ripristina il comportamento di trattare Exe come WinExe. Impostare questo valore su true per ripristinare il comportamento del valore della proprietà OutputType di Exe. Il valore predefinito è false.

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

Vedi anche