命名空间和其中的“System”一起使用

Namespace and Using with 'System' in it

提问人:Adjit 提问时间:12/13/2022 更新时间:12/13/2022 访问量:71

问:

我有一个图书馆 -Foo.System.Management

我有一个申请 -Foo.New.Application

在此应用程序中,被导入,最终发生的事情是这正在被解析并导致我的项目抛出错误的说法Using System;Foo.System

命名空间中不存在类型或命名空间DiagnosticsFoo.System

我的假设是,由于相同的 Base 命名空间,它导致了该分辨率。浏览命名空间文档,我真的找不到对此的明确解释。Foo

  • 我有哪些选择?Foo.New.Application
  • 其中一些指令是生成的代码,因此我无法控制别名。我应该重命名库吗?Using System;
  • 出于这个原因创建命名空间是不好的做法吗?Foo.System
C# 命名空间 using-directives

评论

0赞 Flydog57 12/13/2022
我不认为我会包含在我的命名空间之一中 - 如果它让我感到困惑,就像混淆编译器一样。但是,您通常可以使用关键字的别名功能来解决奇怪的命名空间问题。像.可能需要一些实验才能正确(并且适合您的用例)Systemusingusing Management = Foo.System.Management;
0赞 Adjit 12/13/2022
@Flydog57对,别名对我有用,但就像我说的......某些代码生成导入会导致冲突。我之所以命名我的库,是因为我抽象了一些我们使用的通用函数SystemSystem
1赞 12/13/2022
您能否影响/配置代码生成,使其将指令置于任何命名空间声明之外?因为这样 using 指令将位于全局命名空间范围内,最接近的“System”命名空间为 global::System 命名空间。或者,您可以将代码生成配置为始终生成具有植根于全局的绝对命名空间名称的 using 指令,即不仅仅是?using System;using global::System;using System;
0赞 Adjit 12/13/2022
@MySkullCaveIsADarkPlace不太熟悉如何影响代码生成。它是一个 WPF 应用程序,是引发错误的文件,File.g.cs
1赞 12/13/2022
等等,.g.cs 文件的代码生成器不是不再将 using 指令放在命名空间声明之外了吗?(我在这里只有旧的 .NET Framework WPF 项目可以查看,对于这些项目,生成的 .g.cs 文件在任何命名空间声明之外都有 using 指令。您是否确定在使用指令时遇到问题,而不仅仅是在生成的代码中使用某些完全限定的类型名称(如 System.SomeTypeName 或 System.Blah.SomeOtherTypeName)时遇到问题?

答:

1赞 Nora Söderlund 12/13/2022 #1

引用设计指南:

❌ 不要引入泛型类型名称,例如 Element、Node、Log 和 消息。

这样做很有可能会导致类型名称 常见方案中的冲突。应限定泛型类型 名称(FormElement、XmlNode、EventLog、SoapMessage)。

核心命名空间包括所有系统命名空间,不包括应用程序模型的命名空间和基础结构命名空间。核心命名空间包括 System、System.IO、System.Xml 和 System.Net 等。

❌ 不要提供会与 核心命名空间。

例如,切勿使用 Stream 作为类型名称。它会与 System.IO.Stream,一种非常常用的类型。

https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-namespaces

所以,是的,你应该为你的库找到一个更合适的名称,它遵循命名空间名称的设计准则,并且将其用作命名空间名称的一部分确实是一种不好的做法。System