【问题标题】:Global namespace with mixed language solution具有混合语言解决方案的全局命名空间
【发布时间】:2014-10-28 05:48:43
【问题描述】:

我有一个 VB.NET 项目,其中有对另一个 VB.NET 项目和一个 C# 项目的项目引用。每个引用的程序集都定义了一个具有相同名称的类,例如Class1。如果没有命名空间标识符,即Dim c As Class1,我在这两种情况下都无法访问它,这将是模棱两可的。

编译器强迫我使用

Dim c As Global.C#Namespace.Class1

但 VB.NET 类可以省略 Global

Dim c As VBNamespace.Class1

在这种情况下,Global 标识符的作用是什么,为什么只用于 C# 引用?为什么在 VB.NET 的情况下它是不必要的(实际上Global.VBNamespace.Class 编译)?

【问题讨论】:

  • 你的VB项目的根命名空间是否与C#命名空间冲突? C# 命名空间是否与某些 System 命名空间冲突?
  • 一个具体的例子很重要。当您使用 Globals 时,编译器会忽略源代码文件中的任何 Imports 指令。然后您必须输入 full 类型名。这是 RootNamespace.NamespaceName.Typename。 RootNamespace 名称在 Project + Properties 的 Application 选项卡中设置。
  • 每个项目的RootNamespace都不一样。仅使用一个Globals 并不会使编译器忽略所有Imports 似乎。我创建了一个新的简单 VB 项目和一个具有不同命名空间的 C# 和 VB 类库,并且都定义了 Class1。在这种情况下不需要全局(一切正常)。我无法区分这和我的解决方案。
  • 核心 VB 项目中引用其他项目的根命名空间是什么?
  • 核心 VB 项目:“仪器”,参考项目:C#:“公司名称”,VB:“实用程序”。冲突的类分别是“Companyname.CompanynameSystem.Blade”、“Utilities.Blade”

标签: c# .net vb.net namespaces


【解决方案1】:

有一个与引用的 C# 命名空间名称同名的旧类。编译器将该标识符识别为类而不是引用程序集中的命名空间。

重要的一点是编译器被命名空间和同名的类混淆了。

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 2010-09-05
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多