【问题标题】:How do you make VB.NET namespaces behave like C#?如何使 VB.NET 命名空间表现得像 C#?
【发布时间】:2011-01-23 15:07:53
【问题描述】:

我正在将项目从 C# 转换为 Visual Basic,而 VB.NET 中的命名空间的行为方式很奇怪。有某种隐藏的默认命名空间,这很烦人。我希望它的行为与 C# 相同,它按预期工作 - 内容进入您为它们创建的命名空间。

我通常用say来解决它

using MyClassLibrary;

在 C# 和 VB 中

Imports MyClassLibrary
Imports MyClassLibrary.MyClassLibrary

但如果功能相同且合乎逻辑,那就太好了。

另一个更大的问题是,我有一个 .tt 文件,而 C# 项目在与 VB 不同的命名空间中生成代码。

是否有一些解决方案可以使两者在命名空间方面表现相同?

【问题讨论】:

  • 你在模板文件中指定了什么命名空间?你指定了什么输出语言? C# 还是 VB?
  • 模板文件是自动生成的,没有明确指定命名空间:Dim namespaceName As String = If(code.VsNamespaceSuggestion(), GetObjectNamespace(ModelNamespace))

标签: c# vb.net namespaces


【解决方案1】:

检查项目的属性,有一个默认命名空间选项,可以在 VB 项目中设置,但不是 C# 项目。除了 VB 的“My”命名空间外,命名空间在不同语言中的行为应该相同。

【讨论】:

  • 我相信它在VB中可能被称为“根命名空间”,它们都在项目属性的应用程序选项卡中,在右上角。
  • 我的 .tt 文件自动生成与 C# 解决方案不同的命名空间的代码时仍然遇到问题......对此有什么想法吗? C# 解决方案生成正确的命名空间 MyClassLibrary,但 VB 解决方案生成不同的命名空间,这意味着使用我的类库的东西必须导入 MyClassLibrary 和 MyClassLibrary.MyOtherNamespace
  • 不正确,c# 默认命名空间和 vb 根命名空间的行为方式不同。 vb 中的根命名空间会添加到项目中的所有命名空间中,而在 c# 中,默认命名空间会放在源文件中。因此,在 vb.net 中,如果根命名空间是 MyRootNamespace,并且您有一个具有命名空间 MySourceNamespace 的源文件,那么您必须用来访问 MySourceNamespace 中的任何内容的实际命名空间是 MyRootNamespace.MySourceNamespace。 VB 会自动为您在该项目中导入根命名空间。
  • 恕我直言,这里的最佳做法是在创建任何 VB.Net 项目后立即从任何 VB.Net 项目中删除根命名空间,并在源文件中使用命名空间。
  • 如果是这样的话,如果你用项目 A 和项目 B 创建一个解决方案,要从项目 A 访问项目 B 的资源,你将不得不使用 BB 而不是这种情况
【解决方案2】:

在 VB 项目选项中勾选 Root namespace。清除它。

这与 C# 项目中的 默认命名空间 不同。如果您更改 C# 项目中的默认命名空间,现有文件不会更改。但是,如果您在 VB 项目中更改 Root 命名空间,这将影响所有现有成员。

【讨论】:

  • 澄清一下;这实际上是一样的,对吗?只是其中一个会发生并重构现有文件,而另一个不会?
  • 因为命名空间是默认设置的,我看不出怎么会一样。
  • @pezi: 不,它不会重构文件……但是当你编译项目时(而不是通过命令行编译单个文件),编译器会将根命名空间添加到所有命名空间(即使源文件没有指定任何命名空间)。
  • @Konrad - 啊,我明白了,谢谢你的解释,我不知道。
  • @Konrad - 这怎么可能是正确的?默认情况下,在空白项目中,默认命名空间设置为 MyProjectName。如果您创建一个新类,它以命名空间 MyProjectName 开头。所以必须忽略默认命名空间。我想当您忽略指定一个时会使用默认命名空间。将它添加到所有内容之前会很奇怪。
【解决方案3】:

我只能得出结论,虽然上述从 VB.NET 中删除根命名空间的答案似乎有效,并且可能对于模仿 C# 处理命名空间的方式的某些解决方案有效,但其他文件(如实体设计器文件和自动生成的文件)代码和模板命名空间的行为不同,如果不将它们分开,你就无法改变它们的行为。在以这种方式进行了一次转换后,我遇到了一些文件以与 C# 不同的方式定义自己的命名空间的问题,我决定最好使用 Visual Basic 的内置怪癖,而不是尝试绕过他们。

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2011-12-30
    • 2010-12-23
    • 2015-06-05
    相关资源
    最近更新 更多