🔰

WPFアプリケーションのMainメソッドを編集する

2023/09/04に公開

概要

WPFのMainメソッドは通常、自動生成されますが、Mainメソッドの自動生成をやめ、独自のエントリポイントを定義できるようにする方法を紹介します。

開発環境

  • .NET 7.0
  • Microsoft Visual Studio 2022 Community (64ビット) Version 17.7.3
  • C# 11.0
  • Windows 10 Pro 64bit 22H2 (OSビルド 19045.3208)

対象読者

  • WPFの開発を始めたばかりの初心者の方
  • WPFのMainメソッドをカスタマイズしたい方

自動生成されるMainメソッドについて

WPFのプロジェクトではApp.xaml.csファイルのMainメソッドがエントリポイントとなっています。
App.xaml.csファイルのメソッド一覧からMain()をクリックすると、

自動生成されるMainメソッドの中身を確認できます。

独自のMainメソッドを追加する

Mainメソッドの自動生成を停止して、独自のMainメソッドを実装していきます。

Mainメソッドの自動生成を停止する

  1. WPFプロジェクトのプロジェクトファイルを編集します。
  2. 「EnableDefaultApplicationDefinition」要素を追加し、falseを指定することでMainメソッドを自動生成しないようにします。
<Project Sdk="Microsoft.NET.Sdk">

	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFramework>net7.0-windows</TargetFramework>
		<Nullable>enable</Nullable>
		<UseWPF>true</UseWPF>
+		<EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
	</PropertyGroup>

</Project>

この時点でApp.xaml.csにMainメソッドの定義が無くなり、App.xamlのビルドアクションが「アプリケーション定義」から「ページ」に変わります。

独自のMainメソッドを追加する

  1. App.xaml.csにMainメソッドを追加します。
App.xaml.cs
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
+        [STAThread]
+        public static void Main()
+        {
+            Debug.WriteLine("My Main Method.");
+            App app = new();
+            app.InitializeComponent();
+            app.Run();
+        }
    }
  1. デバッグ実行をして動作確認します。MainWindowが表示され、追加したMainメソッドを実行していることが確認できます。
  2. GitHubにサンプルを公開しています。

https://github.com/MasayukiHattori/WpfMain

Discussion