SDK形式のcsprojを持つWPFプロジェクトでApp.xamlのMainメソッド自動生成を抑制する方法
SDKプロジェクトのWPFアプリケーションでMainメソッド自動生成を防止する。
Microsoftの公式リファレンスに載っている情報なのだが、忘れやすいためメモ。公式リファレンスの記載場所は以下。
Microsoft.NET.Sdk.Desktop の MSBuild プロパティ - .NET | Microsoft Docs
本記事の適用可能対象フレームワーク
- .NET Framework
- .NET Core 3.1
- .NET 5
.NET 5以降もおそらくWPFである限りは適用可能。
結論
csprojファイルにEnableDefaultApplicationDefinition
を追加する。
<PropertyGroup> <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition> </PropertyGroup>
上記を追加した後のcsprojファイルは、以下のようになる。
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net461</TargetFramework> <UseWPF>true</UseWPF> <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition> </PropertyGroup> </Project>
WPFのMainメソッド
Mainメソッドの自動生成を抑制したなら、自力でMainメソッドを作成する必要がある。一般にProgram.cs
というファイルをプロジェクトに追加し、以下の内容を記載する。
(1)最小形
Visual Studioが自動生成するコードと同じ。
namespace WpfApp1 { public static class Program { [System.STAThread] public static void Main() { var app = new App(); app.InitializeComponent(); app.Run(); } } }
(2)スプラッシュスクリーンを表示
スプラッシュスクリーンを表示する場合、プロジェクトにスプラッシュスクリーンを追加し、メインメソッドの先頭でSystem.Windows.SplashScreen.Show
を呼ぶ。
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <!-- 中略 --> <ItemGroup> <SplashScreen Include="SplashScreen1.png" /> </ItemGroup> </Project>
namespace WpfApp1 { public static class Program { [System.STAThread] public static void Main() { var splashScreen = new System.Windows.SplashScreen("SplashScreen1.png"); splashScreen.Show(autoClose: true); var app = new App(); app.InitializeComponent(); app.Run(); } } }