【问题标题】:Can't create a new namespace in VB.Net project using VS 2019无法使用 VS 2019 在 VB.Net 项目中创建新命名空间
【发布时间】:2020-01-09 10:08:58
【问题描述】:

我正在尝试在新的 VB.NET 项目中定义新的命名空间和类;但是,Visual Studio 不允许我实例化我的任何新命名空间/类/方法。

我有.....

  1. 在 Visual Studio 2019 社区中建立一个新项目;
  2. 使用单个类 (TestClass) 和一个方法 (ShowMessageBox) 创建了一个新命名空间 (SignInSignOut);
  3. 尝试将新命名空间导入现有代码隐藏页面 (Default.aspx.vb);和
  4. 尝试从代码隐藏页面的 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

尝试在 Default.aspx.vb 代码隐藏页面上导入 Namespace.Class 并实例化方法.....

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 社区解决了这个问题。我重新安装了 VS 2010 Pro 的旧副本,并且示例按预期工作,这让我相信我可能对 VS 2019 社区有问题。

【问题讨论】:

  • 包含TestClass 的项目是否在项目属性中指定了根命名空间?此外,如果您遇到错误,您应该将它们包含在您的问题中。
  • 为避免由于 VB 的默认命名空间引起的任何歧义,请考虑将您添加的命名空间植根到 Global Namespace

标签: vb.net namespaces visual-studio-2019


【解决方案1】:

到目前为止我注意到的四件事:

  1. 导入命名空间,而不是类(至少目前如此):

    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
    
  2. 确保这是命名空间的全名,并且您没有从项目中继承更高级别的命名空间:

    Imports MyProjectName.SignInSignOut
    
  3. ASP.NET Webforms 对代码的存放位置很挑剔。放在解决方案的App_Code文件夹中。

  4. MsgBox() 不会做你在 webforms 项目中所期望的。它打开一个消息框,但它会在网络服务器上打开,而不会在用户机器上的浏览器中打开。消息框仍会阻止线程,直到有人将其关闭,这对您的网络服务器来说是个问题。

【讨论】:

  • 乔尔,感谢您的回复。不幸的是,完整的命名空间方法(步骤 #2)也失败了。 “WebApp1.SignInSignOut”没有选项。实际上,新文件已放置在 App_Code 文件夹中。是的,我意识到 MsgBox 方法会破坏生产服务器上的 Web 应用程序;但是,它在使用 localhost 进行调试时工作正常。
【解决方案2】:

在 Visual Basic 中,命名空间通常分为两部分(与 c# 不同)。当您创建项目时,它会自动为您创建一个命名空间,您可以在项目属性中看到它 - Default Namespace。您最初会在此处找到与 Assembly Name 和原始项目名称相同的值。现在,让我们假设,这个名字是MyWebProject

现在,当您添加一个新文件时,它不会添加 Namespace 块。你有自动命名空间MyWebProject。如果你添加命名空间块,比如MyFirstNamespace,你在这个块中的类将是-MyWebProject.MyFirstNamespace,因此在VB.net 中有两部分命名空间。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多