使用不再需要的语句?[复制]

Using statements no longer required? [duplicate]

提问人:Dear Deer 提问时间:7/27/2023 最后编辑:Md Farid Uddin KironDear Deer 更新时间:8/2/2023 访问量:130

问:

我想知道为什么我不必再在 .NET 7.0 应用程序中使用所需的命名空间。我正在 Blazor 应用中进行一些测试,我注意到我不再需要像以前那样在文件开头包含命名空间。

在我展示的那个示例文件中,我正在使用接口和类。为什么我不必在文件开头使用下面?IEnumerableHttpClient

using System.Collections.Generic;
using System.Net.Http; 

如果我无论如何都包含这些命名空间,那么 IDE 会将它们显示为我可以删除的不必要的命名空间 - 为什么?C# 在哪里知道这些接口/类需要哪个命名空间?

我不知道有任何文件会全局使用这些命名空间。有这样的事情吗?

该项目是 Blazor Server 应用。我正在使用 .NET 7.0,Visual Studio 2022 版本 17.6.4

enter image description here

C# ASP.NET-Core 命名空间 NET-6.0 .NET-7.0

评论

5赞 madreflection 7/27/2023
hanselman.com/blog/implicit-usings-in-net-6

答:

3赞 Md Farid Uddin Kiron 7/27/2023 #1

如果我仍然包含这些内容,那么 IDE 会将它们显示为不必要的 我可以摆脱的命名空间 - 为什么?C# 从哪里知道哪个 命名空间这些接口/类需要吗?

好吧,它调用隐式 using 指令,这意味着您可以使用在这些命名空间中定义的类型,而无需指定其完全限定名称或手动添加 using 指令。

最重要的是,自 .NET 6 或 C# 10 引入以来,它可能知道也可能不知道,启用该功能后,.NET SDK 会根据项目 SDK 的类型为一组默认命名空间添加全局 using 指令。

默认项目配置。NET6 及更高版本:

如果检查 .csproj 文件中的默认配置,则可以获取详细信息,如下所示:

enter image description here

注意:对于面向 .NET 6 或更高版本的新 C# 项目,此功能将 ImplicitUsings 设置为默认启用。

如果要启用或禁用此功能,可以按如下方式执行此操作:

<PropertyGroup>
  <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

注意:如果要删除此属性,可以将其设置为 false 或 disable。此外,详情请参阅此官方文档