次の方法で共有


コンパイラの警告WFO0003

バージョンがリリースされました: .NET 9

app.manifestから高 DPI 設定を削除し、Application.SetHighDpiMode API または ApplicationHighDpiMode プロジェクト プロパティを使用して構成します。

Windows フォーム アプリケーションでは、アプリケーション構成または Application.SetHighDpiMode API を使用して、アプリケーションの DPI 認識を指定する必要があります。

プロジェクトには、app.manifest設定を含む<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>

この警告を修正するには

Windows フォーム アプリケーションでは、アプリケーション構成または Application.SetHighDpiMode API を使用して、アプリケーションの DPI 認識を指定する必要があります。

C# の使用

ApplicationConfiguration.Initializeする前に、Application.Run() メソッドを呼び出します。

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

この ApplicationConfiguration.Initialize メソッドは、アプリのプロジェクト ファイルの設定に基づいて、アプリのコンパイル時に生成されます。 たとえば、次の <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>

これらの設定により、次のメソッドが生成されます。

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

Visual Basic の使用

Visual Basic では、高 DPI モードが 2 か所に設定されます。 1 つ目はプロジェクトのプロパティです。これは Visual Studio Designer に影響しますが、実行時にアプリには影響しません。

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

2 番目の場所は、Visual Basic Application Framework の設定です。 これらは、プロジェクトのプロパティ ページの Application>Application Framework にあります。 これらの設定は、 My Project\Application.myapp ファイルまたはアプリケーション起動イベント ハンドラーに保存されます。

Visual Basic でのフォントの設定

ただし、実行時フォントは、アプリ設定またはプロジェクト ファイルを通じて Visual Basic では構成できません。 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

警告を管理する

次のいずれかの方法で警告を抑制します。

  • .editorConfig ファイルでルールの重大度を設定します。

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

    エディター構成ファイルの詳細については、「コード分析規則の構成ファイルを参照してください。

  • プロジェクト ファイルに次の PropertyGroup を追加します。

    <PropertyGroup>
        <NoWarn>$(NoWarn);WFO0003</NoWarn>
    </PropertyGroup>
    
  • #pragma warning disable WFO0003 ディレクティブを使用してコード内で抑制します。