C# 之重写应用的 Main() 入口函数

本文介绍了如何在WPF项目中避免直接修改App.g.cs来实现自定义Main函数,通过创建自定义静态类和设置启动对象来重写主入口点。探讨了尝试自定义Main函数的限制及正确的方法,适合WinForm转WPF开发者参考。
摘要由CSDN通过智能技术生成

▪ 前言

之前做过 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 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值