2012-09-28 35 views
11

我試圖使用stylecop正確設置一些舊代碼。它要求將使用語句放在裏面。除了一個之外,它對 有效。我已經將問題簡化爲下面的代碼。在命名空間中使用聲明失敗

namespace B.C 
{ 
    using System; 

    public class Hidden 
    { 
     public void SayHello() 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 
} 

namespace A.B.C 
{ 
    using B.C; 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      new Hidden().SayHello(); 
     } 
    } 
} 

這使編譯錯誤,錯誤

「的類型或命名空間名稱‘隱藏’找不到(是否缺少using指令或程序集引用?)」。

如果我用B.C移動;在命名空間A.B.C之上的然後它建立正確。 Hidden類是由不同的團隊開發的,我們不能修改它。

+2

也許'B.C'命名空間被錯誤地評價爲'A.B.C'在命名空間'A.B.C'範圍時,重命名爲別的東西,或指定呢?在全局範圍內它不知道任何名稱空間,因此在'A'('A.B')中發現'B'首先不假定它是'B'。 –

回答

15

由於您位於名稱空間A內,因此B.C實際上是A.B.C

使用global::指定要從根本看:

using global::B.C; 
+0

+1完美..... – Habib

+0

+1很好的解釋 –

+2

這也是值得一提的這個作品無處不逃脫地獄的命名空間,不僅在using語句。 (例如'new global :: MyNS.BlahBlah()') –

2

B.C與A.B.C.發生衝突您需要B.C與global