遵循this答案。我可以禁用自动实例化吗?我想让VS显示错误:
引用非共享成员需要对象引用
答案 0 :(得分:1)
根据在创建项目时选择的初始项目模板来初始化Visual Studio中启用的功能。通常,可以选择“ Windows Forms App(.Net Framework)Visual Basic”模板,如下所示。
(注意:所有图像均基于VS 2017版本15.8.7)
这将加载一个VB项目环境,该环境包括大量自动代码生成,这些代码通过添加My Namespace
(包括“默认表单实例” 功能)来支持VB应用程序框架(请参阅:My.Internals: Examining the Visual Basic My Feature。现在,您可以尝试通过“项目属性”->“应用标签”->“启用应用程序框架”复选框来禁用此框架,但所有要做的就是要求您提供自己的“ Sub Main”实现。>
要创建一个不含所有“我的命名空间”代码生成(包括默认表单实例)的项目,您需要从“空项目(.Net Framework)”模板开始。
这将创建一个准VB项目。如果添加WinForm(“项目”菜单->“添加窗口表单”)并转到代码视图并添加以下内容:
Class Demo_NoDefaultForms
Sub ErrorOnForm1Reference()
Form1.Text = "ain't gonna work"
End Sub
End Class
您会看到不支持默认的Form1
实例。
此外,项目属性中的所有“应用程序框架”内容均已禁用。
项目类型My Namespace
信息就像所有项目信息都存储在 projName.vbproj 文件中,并存储在<MyType>
标记中一样。尽管我从未在此标签上找到任何官方文档,但以下内容总结了我对创建各种项目类型的观察。
MyType Tag Value Project Type ----------------------------- ------------------------------------------------ WindowsForms Normal Windows Form App w/ Application Framework enabled WindowsFormsWithCustomSubMain Normal Windows Form App w/ Application Framework disabled Console Console App w/ Application Framework enabled Custom WPF Application Empty No My Namespace additions
从“空项目(.Net Framework)”模板开始将很乏味,因为您需要执行大量样板设置并每次都声明一个“ Sub Main”。我建议您使用所有自定义项创建一个基础项目,然后将该项目导出一个新模板(请参阅:How to: Create project templates。