如何阻止WPF项目中app.g.cs文件自动生成Main方法?
WPF 自定义Main入口后App.g.cs仍报错的解决方法
问题根因
你遇到的CS7036报错、自动生成代码仍调用无参App构造函数的问题,本质是App.xaml的生成操作(Build Action)配置未完全生效,或项目缓存未清理导致的:
- 当App.xaml的生成操作是默认的
ApplicationDefinition时,WPF编译器会自动在App.g.cs中生成包含new App().Run()逻辑的Main入口方法,这是报错的直接原因——你给App类新增了带参构造函数后,编译器不再自动生成无参构造,自动生成的Main方法调用无参构造就会触发参数不匹配错误。 - 你之前将App.xaml移除再以Page形式添加的操作,理论上会把生成操作改为
Page,此时编译器只会生成App的部分类代码和InitializeComponent实例方法,不会生成自动Main入口。但如果操作后未清理项目缓存,或者配置被意外覆盖,就会导致生成操作回退为ApplicationDefinition,继续生成自动Main代码。
修复步骤
- 确认App.xaml生成操作配置
- 在解决方案资源管理器中右键点击
App.xaml,选择「属性」 - 确认「生成操作」属性的值为
Page,而非ApplicationDefinition - 确认App.xaml的「自定义工具」属性值为
MSBuild:Compile
- 在解决方案资源管理器中右键点击
- 清理项目缓存
关闭Visual Studio,删除项目根目录下的bin、obj文件夹,再重新打开项目编译,避免旧的自动生成代码残留导致报错。 - 校验自定义Main逻辑
右键项目 → 「属性」→ 「应用程序」标签页,确认「启动对象」下拉框已经选中你自定义的Main方法所在的类,自定义Main的参考逻辑如下:[STAThread] static void Main(string[] args) { // 你的自定义初始化逻辑 var customParam = new YourCustomService(); // 手动调用带参构造实例化App var app = new App(customParam); // 手动触发XAML资源初始化 app.InitializeComponent(); app.Run(); }
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

