▪ 前言
之前做过 WinForm 开发的朋友一定很熟悉,我们的应用程序都是从 Program.cs 的一个 Main 方法开始的。
但是在 WPF 中,Main 函数在项目生成的时候,系统自动在后台为我们生成。根据项目生成方式的不同,其文件位于 obj/Debug/App.g.cs
或者 obj/Release/App.g.cs
。
Main()
函数主要功能就是实例化应用主体,并自动根据 App.xaml
文件内的 StartupUri
参数启用第一个窗口(默认为 MainWindow.xaml
)
那么,我们修改 obj/Debug/App.g.cs
或者 obj/Release/App.g.cs
的 Main 函数,是否可以达到自定义 Main 函数的目的呢?答案是否定的,因为该文件在项目每次生成的时候,都会被重新生成并覆盖。
▪ 如何重写 Main() 函数
1. 自定义静态类
名称可以随便取,这使用 Index
类
namespace MyApp
{
public static class Index
{
/// <summary>
/// 应用程序的主入口点
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main()
{
// 自定义代码 ...
MyApp.App app = new MyApp.App(); // WPF 项目的Application实例,用来启动WPF项目的
app.InitializeComponent();
app.Run();
}
}
}
2. 重新选择程序入口点
此时运行项目,会报如下错误:
error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.
大致意思就是程序有多个入口点,无法确定使用哪个
在 VS 的 ++解决方案资源管理器++ 的窗口里, ++右键项目++ -> ++属性++ -> ++应用程序++ -> ++启动对象++,选择自定义 MyApp.Index
即可