[WPF] 独自のエントリーポイント Main メソッドを定義する

2022-12-14 (水)

App.xaml により Main メソッドは自動生成されますが、独自のエントリーポイントを定義して呼び出す方法です。

環境

  • .NET 7.0.101
  • C# 11.0
  • Visual Studio 2022 Version 17.4.3
  • Windows 10 Pro 64bit 22H2 19045.2251

結果

Program.cs

Program.cs を作成して、エントリーポイントを定義します。

using System;

namespace WpfApp;

public class Program
{
    [STAThread]
    public static void Main(string[] args)
    {
        var app = new App();
        app.InitializeComponent();
        app.Run();
    }
}

WpfApp.csproj

<StartupObject> の行を追加して、Program.Main() が実行されるように設定します。

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

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net7.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <StartupObject>WpfApp.Program</StartupObject>
  </PropertyGroup>

</Project>

備考

App.xaml のビルドアクションは、デフォルトで アプリケーション定義 に設定されています。

明示的に設定すると、以下のようなイメージです。

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

  <ItemGroup>
    <ApplicationDefinition Include="App.xaml" />
  </ItemGroup>

</Project>

ビルドすると、obj/Debug/net7.0-windows/App.g.cs というファイルが作成され、Main メソッドが定義されています。

/// <summary>
/// App
/// </summary>
public partial class App : System.Windows.Application {

    /// <summary>
    /// InitializeComponent
    /// </summary>
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "7.0.1.0")]
    public void InitializeComponent() {

        #line 5 "..\..\..\App.xaml"
        this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

        #line default
        #line hidden
    }

    /// <summary>
    /// Application Entry Point.
    /// </summary>
    [System.STAThreadAttribute()]
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "7.0.1.0")]
    public static void Main() {
        WpfWorldApp.App app = new WpfWorldApp.App();
        app.InitializeComponent();
        app.Run();
    }
}

感謝

<StartupObject> を設定する方法

App.xaml のビルドアクションを Page にする方法

App.g.cs の自動生成について

2022-12-14 (水)