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

How do I control what usings are made global in a C#10 / .NET6.0 project?

提问人:Stefan 提问时间:1/19/2023 最后编辑:Stefan 更新时间:3/2/2023 访问量:1904

问:

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

它似乎做了两件事:

  • 如果全局使用中有一个命名空间,则不必在 *.cs 文件的顶部包含该命名空间。using ...
  • 一些命名空间被隐式添加到全局 usings 中,哪些命名空间取决于它看起来的项目类型。

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

<PropertyGroup>
    <ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>

我的问题:

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

global-usings 文件位于顶部,因此我不能在此文件中添加/删除/编辑 global-usings。// <auto-generated/>

C net-6.0 visual-studio-2022 使用指令 c#-10.0

评论


答:

5赞 Guru Stron 1/19/2023 #1

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

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

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

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

<ItemGroup>
    <Using Include="Some.Namespace"/>
</ItemGroup>

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

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

<ItemGroup>
    <Using Remove="Some.Namespace"/>
</ItemGroup>

这个全局使用指令功能有我没有想到的其他用途吗?

没有AFAIK,除了前面提到的。

有用的链接:

评论

1赞 Jeremy Morren 3/2/2023
注意:是错误的。它应该是<Using Exclude="Some.Namespace" /><Using Remove="Some.Namespace" />
1赞 Mayur Ekbote 1/19/2023 #2
  1. 大多数情况下是可以的。您可以将类从一个全局使用的命名空间移动到另一个命名空间,而无需更改源代码。这大大节省了重构期间的时间。
  2. 是的。而不是宣布就是这样!此声明可以位于项目中的任何位置。理想情况下,创建一个文件并在其中声明所有全局使用的命名空间。using namespace_nameglobal using namespace_nameimport.cs
  3. 是的。找到它被声明为的位置并删除全局单词。global using nameclashing_namespace
  4. 除了上面的 (1) 之外,我想不出任何其他。

评论

0赞 Stefan 1/25/2023
谢谢你的提示!好主意!import.cs
1赞 user15716642 6/7/2023
在 .NET 7 中是否如此?global对我来说是下划线的,当我在任何现有使用之前添加“global”时,没有表明它有什么问题。
1赞 Mayur Ekbote 6/8/2023
检查是否在解决方案设置中启用了全局使用。