如何控制 C#10 / .NET6.0 项目中的全局使用?

Ste*_*fan 2 c# using-directives .net-6.0 visual-studio-2022 c#-10.0

.NET 6.0 中的 C#10 支持称为全局 using 指令的新功能。

它似乎做了两件事:

  • 当您在全局使用中有一个命名空间时,您不必using ...在 *.cs 文件的顶部包含该命名空间的 。
  • 一些命名空间被隐式添加到全局使用中,这些命名空间取决于项目类型。

我知道我可以通过将以下内容添加到我的项目文件中来禁用将命名空间隐式添加到全局使用中:

<PropertyGroup>
    <ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 这个全局 using 指令功能是否只是为了方便起见,以便全局包含一些常用的命名空间,这样这些 using 就不会弄乱 *.cs 文件的顶部?
  2. 是否可以添加我自己的全局用途?
  3. 是否可以删除一些隐式包含的全局使用(例如,在名称冲突的情况下)?
  4. 这个全局 using 指令功能是否还有我没有想到的其他用途?

全局使用文件位于// <auto-generated/>顶部,因此我不能仅在此文件中添加/删除/编辑全局使用。

Gur*_*ron 6

这个全局 using 指令功能是否只是为了方便起见,以便全局包含一些常用的命名空间,这样这些 using 就不会弄乱 *.cs 文件的顶部?

是的,它们只是为了方便使用命名空间(减少混乱、创建全局别名、整体上更轻松的命名空间管理)

是否可以添加我自己的全局用途?

是的,您可以通过添加global using Some.Namespace;到其中一个文件的顶部(您可以专门为此创建一个单独的文件)或将以下内容添加到 .cproj 来将全局使用添加到项目中:

<ItemGroup>
    <Using Include="Some.Namespace"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

是否可以删除一些隐式包含的全局使用(例如,在名称冲突的情况下)?

是的,您可以使用 删除自动导入的命名空间(从项目默认导入中ImplicitUsings

<ItemGroup>
    <Using Remove="Some.Namespace"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这个全局 using 指令功能是否还有我没有想到的其他用途?

没有据我所知,除了前面提到的。

有用的链接: