はじめに
WPFのMain関数を書き換えたく色々調べてたのですが
少し手こずったのでメモ
環境
- WPF
- .Net Core 3.1
- Visual Studio 2019
WPFアプリのMain関数について
WPFのプロジェックトにおいて、一番最初に呼ばれる関数はApp.xaml.csファイルのMain関数です。
ただし、App.xaml.csファイルにはMain関数の記載はありません。
コンパイル時に自動で生成されるのです。
WPFのプロジェクトを実行し、App.xaml.csファイル上でメソッド一覧を確認するとMain()
が存在するかと思います。
ただしこのMain関数はビルド時に自動で生成されるものであり、このApp.g.i.csファイル内で書き換えてもビルド時に上書きされてしまいます。
このMain関数を書き換えたい!カスタマイズしたい!という要求も当然のようにあり
以下のような記事がたくさん見つかります。
Main関数を書き換えてみる
上記のようなサイトを参考にすると、App.xamlファイルのビルドアクションをアプリケーション定義からページへと変更すればOKと書いてあります。
ただ、現状の環境ではページに変更しようとすると以下のようなエラーが表示されます。
解決策
解決策を色々と探したところ、以下のページにたどり着きました。
change App project to DLL problems
.xaml are all treated as Page items by default, unless they are named App.xaml (C#) or Application.xaml (VB).
App.xaml/Application.xaml is treated as ApplicationDefinition by default.
To change this default behavior, you have to override the implicit behavior.
雑に訳すと
App.xamlはデフォルトてアプリケーション定義として扱われているから直すならオーバーライドして。という感じですね。
ということで、wpfプロジェクトのプロジェクトファイルを開き、<PropertyGroup>
にEnableDefaultApplicationDefinitionの要素を追加します。
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
</PropertyGroup>
一度ソリューションをクリーンした後に、再度App.xamlのビルドアクションをページに変更します。
今回はエラーが発生しないはずです。
その後、App.xaml.cs内にMain関数を追加してあげるとアプリ起動時に追加したMain関数が呼ばれるようになるかと思います。
Main関数の書き方は上で紹介したリンクを参照ください。
最後に
最近のバージョン変更によるものか、紹介されたサイトの通りではうまくビルドアクションを変更できなかったので少し手間取りました。
同じような人の参考になれば幸いです。