我正在尝试在一个新的 VB.NET 项目中定义新的命名空间和类;但是,Visual Studio不允许我实例化任何新的命名空间/类/方法。
我有。。。。。
- 在Visual Studio 2019社区中建立一个新项目;
- 创建了一个新的命名空间(SignInSignOut(,其中包含单个类(TestClass(和一个方法(ShowMessageBox(;
- 尝试将新命名空间导入到现有的代码隐藏页(默认.aspx.vb(;和
- 尝试从代码隐藏页的 Page_Load(( 方法实例化新的类和方法。
尝试将新命名空间导入现有代码隐藏页失败。
新的命名空间、类和方法.....
Imports Microsoft.VisualBasic
Namespace SignInSignOut
Public Class TestClass
Public Shared Sub ShowMessageBox(ByVal sString As String)
MsgBox(sString)
End Sub
End Class
End Namespace
尝试导入 Namespace.Class 并在 Default.aspx.vb 代码隐藏页上实例化该方法.....
Imports SignInSignOut.TestClass
Public Class _Default
Inherits Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ShowMessageBox("This is just a test!")
End Sub
End Class
编辑
我通过重新安装Visual Studio 2019 Community解决了这个问题。 我重新安装了VS 2010 Pro的旧副本,并且该示例按预期工作,这使我相信VS 2019社区可能有问题。
到目前为止我注意到的四件事:
-
导入命名空间,而不是类(至少目前是这样(:
Imports SignInSignOut Public Class _Default Inherits Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load TestClass.ShowMessageBox("This is just a test!") End Sub End Class
-
确保这是命名空间的全名,并且没有从项目中继承更高级别的命名空间:
Imports MyProjectName.SignInSignOut
-
ASP.NET Webforms对代码应该放在哪里很挑剔。将其放在解决方案的
App_Code
文件夹中。 MsgBox()
不会在 WebForms 项目中执行您所期望的操作。它将打开一个消息框,但它将在Web 服务器上执行此操作,而不是在用户计算机上的浏览器中执行此操作。消息框仍将阻止该线程,直到有人将其关闭,这对您的 Web 服务器来说是一个问题。
在Visual Basic中,通常命名空间分为两部分(与c#不同(。创建项目时,它会自动为您创建一个命名空间,您可以在项目属性中看到该命名空间 -Default Namespace
.在这里,您最初会发现与Assembly Name
和原始项目名称相同的值。现在,让我们假设,这个名字是MyWebProject
现在,当您添加新文件时,它不会添加Namespace
块。您有自动命名空间MyWebProject
。如果你添加命名空间块,如MyFirstNamespace
,你在这个块中的类将是 -MyWebProject.MyFirstNamespace
,因此 VB.net 是两部分命名空间。