2009-12-17 114 views
1

我正在清理Visual Basic(.NET 2.0)解决方案。将其分成两个项目。 150个类在文件顶部有名称空间RebateCalculator。 这些文件现在位于使用默认名称空间RebateCalculator的Project中。如果我要插入一个Class1.cs文件,然后命名空间声明所有其他文件都有 - 那么完全合格的类名称将是RebateCalculator.RebateCalculator.Class1Visual Basic和命名空间问题

有没有什么我可以坚持在前面的命名空间声明使其成为绝对的?而不是重复自己?我宁愿找到这种解决方案与删除名称空间声明(如果文件再次移动)

最终目标:能够在'Namespace RebateCalculator'上执行搜索/替换以将问题修复为150文件。

+0

我猜帮我关闭此为重复 - http://stackoverflow.com/questions/196068/how-do-you-enable-visual-basic-net-namespace-by-default – BuddyJoe 2009-12-17 17:42:32

+0

但请评论是否有一些额外的符号?或我缺少的关键字? – BuddyJoe 2009-12-17 17:56:18

回答

5

你发布的重复答案提到了这个问题。

VB.Net具有“根名称空间”的概念。将Namespace语句添加到代码文件时,给出的名称与根名称空间组合形成完整的名称空间。

因此,在VB.Net中,如果您的根名称空间是MyRoot,然后创建一个类并使用MyNamespace命名空间环绕,那么完整的类名称为MyRoot.MyNamespace.ClassName。如果您不使用Namespace语句,则完整的类名称为MyRoot.ClassName。换句话说,根名称空间设置有助于名称空间的名称。

在C#中,情况并非如此。 C#有一个“默认命名空间”。这只是一个名称空间定义,在创建它们时会自动添加到新类中。如果删除名称空间声明,那么该类没有名称空间。换句话说,默认的名称空间设置实际上不会影响名称空间的名称。

在C#中,命名空间声明中的任何内容都是使用的命名空间。默认名称空间设置仅确定代码文件中默认插入的内容。

采取具有 “TestVBConsole” 的根命名空间设置,并在课堂上没有命名空间声明中VB程序:

Module Module1 
    Sub Main() 
     Dim tc As New TestClass 

     Console.WriteLine(tc.GetType().FullName) 

    End Sub 
End Module 

这个类

Public Class TestClass 
    Public aField As String = "Default" 
End Class 

输出是

TestVBConsole.TestClass 

C#输出中的相同程序

TestClass 

至于你的问题,我不认为有任何方法可以重写这种行为。你只需要在C#中记住,以确保你的命名空间声明是正确的。

+0

其实我所希望的是能够做到这一点。 命名空间Global.NewRoot 或 命名空间_.NewRoot 或 命名空间* .NewRoot – BuddyJoe 2009-12-17 21:24:48

5

我不知道这是否回答你的问题,但为了以防万一......

打开项目属性,然后单击应用程序的性能。在那里清除Root Namespace。然后你的命名空间声明在每个文件将是“绝对”。顺便说一下......这很可能会破坏你的应用程序,并可能需要一段时间才能解决所有问题。在开始之前,一定要备份(或者至少承诺回购)。

另一方面。我认为将一个Project Root Namespace与一个声明的命名空间相结合是令人困惑的。我通常做一个或另一个。

赛斯

+0

我抹了项目的根命名空间。而且很可能会在未来的项目上做到这一点。给你全面控制。就像在任何程序集中放入任何命名空间这对我很重要,因为在我当前的解决方案中,两个项目需要映射到相同的名称空间以实现向后兼容。 – BuddyJoe 2009-12-18 18:42:05