在VB.NET中禁用表单的默认实例

时间:2018-11-02 10:22:38

标签: vb.net visual-studio

遵循this答案。我可以禁用自动实例化吗?我想让VS显示错误:

  

引用非共享成员需要对象引用

1 个答案:

答案 0 :(得分:1)

根据在创建项目时选择的初始项目模板来初始化Visual Studio中启用的功能。通常,可以选择“ Windows Forms App(.Net Framework)Visual Basic”模板,如下所示。

(注意:所有图像均基于VS 2017版本15.8.7)

Windows Forms App Template

这将加载一个VB项目环境,该环境包括大量自动代码生成,这些代码通过添加My Namespace(包括“默认表单实例” 功能)来支持VB应用程序框架(请参阅:My.Internals: Examining the Visual Basic My Feature。现在,您可以尝试通过“项目属性”->“应用标签”->“启用应用程序框架”复选框来禁用此框架,但所有要做的就是要求您提供自己的“ Sub Main”实现。

WinForm Props

要创建一个不含所有“我的命名空间”代码生成(包括默认表单实例)的项目,您需要从“空项目(.Net Framework)”模板开始。

Empty VB Project

这将创建一个准VB项目。如果添加WinForm(“项目”菜单->“添加窗口表单”)并转到代码视图并添加以下内容:

Class Demo_NoDefaultForms
    Sub ErrorOnForm1Reference()
        Form1.Text = "ain't gonna work"
    End Sub
End Class

您会看到不支持默认的Form1实例。

Default Instance fail

此外,项目属性中的所有“应用程序框架”内容均已禁用。

Empty Proj Props

项目类型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