奇怪的C#命名空间问题

时间:2010-12-15 20:18:09

标签: c# visual-studio-2010 namespaces

我有一个包含多个命名空间的项目,其中一个包含其中一个类 - >

Some.Namepsace. (namespace)
               ExistingClass (class)
               ExistingClass2 (class)
               Constants (class)
                        .Enum (enum)

在这个项目中,我创建了一个类,但是具有不正确的命名空间,如此

namespace Some.Namespace.Some.Namespace
{
    public class NewClass {}
}

现在 Some.Namespace.ExistingClass 无法解析对 Some.Namespace.Constants.Enum 的引用 - 它似乎在寻找Some.Namespace.Some.Namespace。 Constants.Enum。

知道为什么吗? NewClass 不引用任何内容,并且没有被任何引用,所以我看不到它的命名空间如何影响任何其他组件。我修复了 NewClass 上的命名空间问题,并修复了它。

2 个答案:

答案 0 :(得分:5)

Some.Namespace.Some.Namespace 中的一个类将尝试解析 Some.Namespace.Constants.Enum as: Some.Namespace.Some.Namespace.Constants.Enum ,而不是 Some.Namespace.Constants.Enum

如果您尝试将Enum引用为: global :: Some.Namespace.Constants.Enum ,它将起作用。

答案 1 :(得分:0)

这必须与visual studio / csc尝试解析引用的方式有关。它似乎是这样的:

  • 相对于调用对象的命名空间
  • 如果找不到这样的命名空间,请尝试查找引用,就好像它是绝对的

就我而言,在我添加Some.Namespace.Some.Namespace.NewClass之前,当VS尝试将引用从Some.Namespace.ExistingClass解析为Some.Namespace.Constants.Enum时,它首先尝试进行相对命名空间查找(从ExistingClasse的{{1开始) }},找不到这样的命名空间。然后它尝试绝对查找并找到它。

在我添加Some.Namespace之后,它找到了命名空间,发现对象不存在,并决定停止搜索。