命名空间错误中不存在C#.NET命名空间名称 - 仅当使用在本地命名空间指令之外时 - 为什么?

时间:2009-11-19 17:59:49

标签: c# .net namespaces

使用.NET 2.0,C#,Windows Forms开发,Enterprise Library 3.1。

我们有一个项目命名空间(称之为Project)。我们在该项目中还有几个子命名空间,例如Project.Namespace1,Project.Namespace2等。

在一个类中,我们定义枚举,以及与Enterprise Library Logging块一起使用的内容,如下所示:

namespace Project.Logging
{
  public static class Logging
  {
    public enum LogPriority
    {
      // enum values here
    }
  }
}

在另一个类中,我使用枚举值,因此我需要声明一个using语句。同一个项目,所以没有可以引用的程序集,对吧?

如果我在本地命名空间内声明使用,就像这样,它可以正常工作:

namespace Project.SomeName
{
  using Project.Logging;

  // code referencing the Logging enum
}

但是,如果我将using语句放在本地名称空间声明之外,我得到“类型或命名空间名称'LogPriority'在名称空间'Project.Logging'中不存在......就像这样:

using Project.Logging;

namespace Project.SomeName
{
  // code referencing the Logging.LogPriority.whatever
}

这是为什么?有没有人遇到过这个?

5 个答案:

答案 0 :(得分:2)

在使用与其命名空间同名的类之前,我遇到了类似的问题(尽管不完全相同)。

奇怪的是,它似乎在某些开发者PC上编译好,但在其他开发者上没有。最后,我们确保没有名称空间包含同名的类。

namespace Project.Logging
{  
  public static class Logging  // this is what caused the probems for me
  {   

  }
}

答案 1 :(得分:2)

我也遇到了有线错误。我找不到任何来自不同程序集的命名空间,但从执行程序集名称开始。 最后,我发现我已将目标框架设置为.NET框架客户端配置文件。

答案 2 :(得分:1)

是的,您很可能在项目属性中为“默认命名空间”设置了异常值。我会验证项目配置。

答案 3 :(得分:0)

我们之前遇到过这个问题,但这一切都归结为命名空间和类名的模糊命名。

当我们尝试将我们的命名空间设置为Services.Web.xxx并且还将服务引用添加为Services.Web.xxxx并且还添加对名为Services.Web.xxx的程序集的引用时,您只能想象我们遇到的问题。

最后为了修复它,我们只是进行了重命名,以确保只有Services前缀的一个实例

此外,您可以执行以下操作并为LogEnum创建LogPnity别名:

using LogEnum= Project.Logging.Logging.LogPriority;

namespace Project.SomeName
{
    internal class MyClass
    {
        public MyClass()
        {
            LogEnum enum1 = LogEnum.None;
        }
    }
}
namespace Project.Logging
{
    public static class Logging
    {
        public enum LogPriority
        {
            None,
            Default
        }
    }
}

答案 4 :(得分:-1)

如果您在命名空间内部或外部使用它,它肯定会有所作为。有一个很好的讨论here,它很可能与您的默认命名空间设置有关。