使用.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
}
这是为什么?有没有人遇到过这个?
答案 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,它很可能与您的默认命名空间设置有关。