VS2022 17.2.5报错BC30420:未找到'Sub Main'且启动对象无法修改
VS2022 VB.NET项目BC30420报错:'Sub Main' was not found,启动对象下拉仅显示Sub Main无窗体选项
故障根因
这个问题是重命名初始窗体时VS没有同步更新项目配置导致的:
- VB.NET WinForms项目的启动对象配置存储在
.vbproj项目文件中,你通过设计器修改窗体Name属性、解决方案资源管理器修改文件名的两步操作,在部分VS2022版本(包括你用的17.2.5)中不会自动同步更新项目文件里旧的Form1启动对象指向 - 重命名完成后未触发项目配置全量重载时,VS靠缓存可以正常运行程序;当你新增第二个窗体触发项目配置重新解析时,原配置中指向的
你的项目根命名空间.Form1类已经不存在,VS无法识别合法的窗体启动入口,就会回退到查找Sub Main作为启动点,同时启动对象下拉列表因扫描不到有效可启动窗体,仅显示Sub Main选项,最终抛出BC30420找不到入口点的错误。
修复步骤
按以下顺序操作即可解决:
- 关闭当前VS2022窗口,打开项目所在的本地文件夹,找到后缀为
.vbproj的项目配置文件,用任意纯文本编辑器(系统自带记事本即可)打开 - 在文件中搜索
<StartupObject>节点,你会看到节点内的值为旧的无效类路径,格式类似:<StartupObject>YourRootNamespace.Form1</StartupObject> - 将节点内的值替换为你需要设置为启动项的窗体的完整类名:
- 如果要启动重命名后的登录窗体,就替换为
YourRootNamespace.FormLogin - 如果要启动新增的第二个窗体,就替换为
YourRootNamespace.你的新窗体类名
根命名空间可以通过打开任意窗体的后置代码,查看代码顶部的Namespace声明获取,也可以后续在项目属性页核对
- 如果要启动重命名后的登录窗体,就替换为
- 保存修改后的
.vbproj文件,重新用VS2022打开项目 - 重新生成项目,此时BC30420报错会直接消失,进入项目属性的启动对象下拉列表,就能看到所有可用的窗体选项,可自由切换启动对象。
兜底排查(如果上述操作后仍有问题)
- 回到VS中右键项目名称,选择「卸载项目」,卸载完成后再次右键选择「重新加载项目」,强制VS刷新所有类文件的索引缓存
- 逐个检查窗体文件的类名匹配:打开每个窗体的
.vb后置代码和对应的.Designer.vb文件,确认类声明和文件名一致,比如FormLogin.vb中是Public Class FormLogin,对应设计器文件中是Partial Class FormLogin,不存在类名和文件名错配的情况 - 核对项目属性-应用程序页的「应用程序类型」,确认选中的是「Windows 窗体应用」,如果误选为类库,项目不会将窗体识别为可启动对象。
内容的提问来源于stack exchange,提问作者DEVTE
相关产品推荐
相关产品推荐

