Aviso do compilador WFO0003

Versão introduzida: .NET 9

Remova as configurações de DPI alto do app.manifest e configure através da API do Application.SetHighDpiMode ou da propriedade do projeto ApplicationHighDpiMode.

Os aplicativos do Windows Forms devem especificar o reconhecimento de DPI do aplicativo por meio da configuração do aplicativo ou com a API Application.SetHighDpiMode.

Exemplo

Seu projeto contém um arquivo app.manifest com a configuração <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>

Para corrigir este aviso

Os aplicativos do Windows Forms devem especificar o reconhecimento de DPI do aplicativo por meio da configuração do aplicativo ou com a API Application.SetHighDpiMode.

Usando C#

Chame o método ApplicationConfiguration.Initialize antes de Application.Run().

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

O método ApplicationConfiguration.Initialize é gerado quando seu aplicativo é compilado, com base nas configurações no arquivo de projeto do aplicativo. Por exemplo, veja as seguintes configurações de <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>

Essas configurações geram o seguinte método:

[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));
    }
}

Usando o Visual Basic

Visual Basic define o modo de DPI alto em dois lugares. O primeiro está nas propriedades do projeto, que afeta o Visual Studio Designer, mas não afeta o aplicativo em tempo de execução.

<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>

O segundo lugar está nas configurações do Visual Basic Application Framework. Eles estão na página de propriedades do projeto, em Application>Application Framework. Essas configurações são salvas no arquivo de My Project\Application.myapp ou em um manipulador de eventos de inicialização do aplicativo.

Definindo a fonte no Visual Basic

A fonte em tempo de execução, no entanto, não é configurável no Visual Basic por meio de uma configuração de aplicativo ou do arquivo de projeto. Ele deve ser definido no manipulador de eventos ApplyApplicationDefaults.

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

Administrar o aviso

Suprima o aviso com um dos seguintes métodos:

  • Defina a severidade da regra no arquivo de .editorConfig.

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

    Para obter mais informações sobre arquivos de configuração do editor, consulte Arquivos de configuração para regras de análise de código.

  • Adicione o seguinte PropertyGroup ao seu arquivo de projeto:

    <PropertyGroup>
        <NoWarn>$(NoWarn);WFO0003</NoWarn>
    </PropertyGroup>
    
  • Suprimir em código com a diretiva #pragma warning disable WFO0003.