Avviso del compilatore WFO0003

Versione introdotta: .NET 9

Rimuovere le impostazioni DPI elevate da app.manifest e configurare tramite l'API Application.SetHighDpiMode o tramite la proprietà del progetto ApplicationHighDpiMode.

Le applicazioni Windows Forms devono specificare la consapevolezza del DPI dell'applicazione tramite la configurazione dell'applicazione o con l'API Application.SetHighDpiMode.

Esempio

Il progetto contiene un file app.manifest con l'impostazione <dpiAware>:

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <!-- other settings omitted for brevity -->
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>
</assembly>

Per correggere l'avviso

Le applicazioni Windows Forms devono specificare la consapevolezza del DPI dell'applicazione tramite la configurazione dell'applicazione o con l'API Application.SetHighDpiMode.

Uso di C#

Chiamare il metodo ApplicationConfiguration.Initialize prima di Application.Run().

class Program
{
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        Application.Run(new Form1());
    }
}

Il ApplicationConfiguration.Initialize metodo viene generato quando l'app viene compilata, in base alle impostazioni nel file di progetto dell'app. Ad esempio, esaminare le impostazioni seguenti <Application*> :

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

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>

    <ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
    <ApplicationVisualStyles>true</ApplicationVisualStyles>
    <ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
    <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>

  </PropertyGroup>

</Project>

Queste impostazioni generano il metodo seguente:

[CompilerGenerated]
internal static partial class ApplicationConfiguration
{
    public static void Initialize()
    {
        global::System.Windows.Forms.Application.EnableVisualStyles();
        global::System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
        global::System.Windows.Forms.Application.SetHighDpiMode(HighDpiMode.SystemAware);
        global::System.Windows.Forms.Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f, (FontStyle)0, (GraphicsUnit)3));
    }
}

Uso di Visual Basic

Visual Basic imposta la modalità DPI elevato in due posizioni. La prima è nelle proprietà del progetto, che influisce su Visual Studio Designer, ma non influisce sull'app in fase di esecuzione.

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

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows</TargetFramework>
    <StartupObject>Sub Main</StartupObject>
    <UseWindowsForms>true</UseWindowsForms>
    <MyType>WindowsForms</MyType>

    <ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
    <ApplicationVisualStyles>false</ApplicationVisualStyles>
    <ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
    <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>

  </PropertyGroup>

</Project>

Il secondo posto è nelle impostazioni di Visual Basic Application Framework. Si trovano nella pagina delle proprietà del progetto, in Application>Framework. Queste impostazioni vengono salvate nel file My Project\Application.myapp o in un gestore eventi di avvio dell'applicazione.

Impostazione del tipo di carattere in Visual Basic

Il tipo di carattere di runtime, tuttavia, non è configurabile in Visual Basic tramite un'impostazione dell'app o il file di progetto. Deve essere impostato nel ApplyApplicationDefaults gestore eventi.

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My
    Partial Friend Class MyApplication
        Private Sub MyApplication_ApplyApplicationDefaults(sender As Object, e As ApplyApplicationDefaultsEventArgs) Handles Me.ApplyApplicationDefaults
            e.HighDpiMode = HighDpiMode.SystemAware
            e.Font = New Font("Microsoft Sans Serif", 8.25)
        End Sub
    End Class
End Namespace

Gestisci l'avviso

Eliminare l'avviso con uno dei metodi seguenti:

  • Imposta la gravità della regola nel file .editorConfig.

    [*.{cs,vb}]
    dotnet_diagnostic.WFO0003.severity = none
    

    Per altre informazioni sui file di configurazione dell'editor, vedere File di configurazione per le regole di analisi del codice.

  • Aggiungi il seguente PropertyGroup al file di progetto:

    <PropertyGroup>
        <NoWarn>$(NoWarn);WFO0003</NoWarn>
    </PropertyGroup>
    
  • Sopprimere il codice con la direttiva #pragma warning disable WFO0003.