2012-09-28 36 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