2009-12-17 117 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