如何在没有冲突的情况下在.NET中创建包含"System"的命名空间?

Sim*_*ver 4 .net c#

有时我在C#中创建了一个命名空间(我不知道VB.NET中的问题是否相同)并且当我从一个不同的DLL中包含它时,它变得疯狂并且与包含'System'的所有内容发生冲突.这会导致疯狂的错误,例如:

命名空间"RR.System"中不存在类型或命名空间名称"ServiceModel"

命名空间"RR.System"中不存在类型或命名空间名称"Runtime"

命名空间"RR.System"中不存在类型或命名空间名称"SerializableAttribute"

如果你不知道我在说什么,那么对你有好处:)我相信很多人已经看到了这个问题.

我不完全确定为什么会这样做.它甚至会出现在文件中,例如生成的Web服务代码,它不包含任何引用RR.System.

这一切都只是因为我RR.System将DLL 包含在不同的项目中.

我怎样才能避免这种情况发生?还是解决它?

yfe*_*lum 6

奇.

现在,你为什么称你的项目为"系统"?

  • 然后最好使用[YourCompanyName]系统.命名空间有一个原因:-) (2认同)

Che*_*eso 6

为避免混淆,您可以完全限定命名空间引用:

global::System.ServiceModel
Run Code Online (Sandbox Code Playgroud)

等等


Chr*_*ood 6

我仍然不明白为什么命名空间与命名空间冲突?命名空间下的所有类型都可以是完全限定的,并且完全限定的名称引用不同的类型。例如

System.Abc.Xyz.Type
Run Code Online (Sandbox Code Playgroud)

没有任何关系

Abc.Xyz.System.Type
Run Code Online (Sandbox Code Playgroud)

System一种情况中的 指的是完全不同的概念(指南中的公司名称),而System第二种情况中的 可以指产品或子系统名称。

如果根命名空间会导致这种干扰,那么这肯定是一个大问题,因为我可能会选择调用我的新雨林监控产品Amazon并将所有类型放在MyCompany.Amazon. 然后稍后我可能会选择使用 S3 存储来存储我的数据,突然 Amazon 命名空间会引起冲突。

我们刚刚遇到了同样的问题,因为我们的项目分为 3 个主要子系统 - 数据库、用户和系统。这些看起来像是我们的 MyCompany 根命名空间下明显的子命名空间。

请记住,这与使用语句无关,正如 Simon 所说的“它甚至会发生在文件中,例如为不包含任何对 RR.System 引用的 Web 服务生成的代码”

更新:以下堆栈溢出问题是相同的。然而,它指向的 MSDN 文章讨论了一个名为 System 的类名,它隐藏了一个命名空间(足够公平),并且还使用 System 作为顶级命名空间(足够公平)。然而,它没有讨论为什么子命名空间与根命名空间冲突。

Stack Overflow 问:global:: 在 C# 中是一种不好的代码味道吗?
MSDN 文章:如何:使用命名空间别名限定符