LoginSignup
7
8

More than 3 years have passed since last update.

.NETCore×WPFアプリのMain関数をカスタマイズする

Last updated at Posted at 2020-11-18

はじめに

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()が存在するかと思います。
image.png

これをクリックすると、Main関数の中身が確認できます。
image.png

ただしこのMain関数はビルド時に自動で生成されるものであり、このApp.g.i.csファイル内で書き換えてもビルド時に上書きされてしまいます。
このMain関数を書き換えたい!カスタマイズしたい!という要求も当然のようにあり
以下のような記事がたくさん見つかります。

WPF:Mainメソッドを書き変えるには?

Main関数を書き換えてみる

上記のようなサイトを参考にすると、App.xamlファイルのビルドアクションをアプリケーション定義からページへと変更すればOKと書いてあります。

image.png

ただ、現状の環境ではページに変更しようとすると以下のようなエラーが表示されます。

image.png

解決策

解決策を色々と探したところ、以下のページにたどり着きました。
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の要素を追加します。

wpfapp.csproj

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWPF>true</UseWPF>
    <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
  </PropertyGroup>

一度ソリューションをクリーンした後に、再度App.xamlのビルドアクションをページに変更します。
今回はエラーが発生しないはずです。

その後、App.xaml.cs内にMain関数を追加してあげるとアプリ起動時に追加したMain関数が呼ばれるようになるかと思います。

Main関数の書き方は上で紹介したリンクを参照ください。

最後に

最近のバージョン変更によるものか、紹介されたサイトの通りではうまくビルドアクションを変更できなかったので少し手間取りました。
同じような人の参考になれば幸いです。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8