转自:豆包ai
在 C# 10 及以上版本中,Global Using 指令(全局 using 指令)是一项简化代码的新特性,允许在项目级别定义全局生效的 using
语句,无需在每个代码文件中重复声明。这能显著减少重复代码,使文件更简洁。
传统上,每个 .cs
文件如需使用某个命名空间(如 System
、System.Collections.Generic
),都需要在文件顶部添加 using
指令。而 Global Using 允许在单个文件中声明一次,让该命名空间在整个项目的所有代码文件中生效。
在任意 .cs
文件中(通常建议单独创建一个 GlobalUsings.cs
集中管理),用 global
关键字修饰 using
语句:
之后,项目中所有 .cs
文件无需再写 using System;
等,可直接使用这些命名空间下的类型(如 List<T>
、ControllerBase
)。
某些项目模板(如 ASP.NET Core Web API、Console App)会自动生成隐式的全局 using,无需手动声明。例如:
- ASP.NET Core 项目默认包含
global using Microsoft.AspNetCore.Builder;
、global using Microsoft.AspNetCore.Http;
等,简化 Web 开发常用命名空间。
- 这些隐式全局 using 由项目文件(
.csproj
)中的 <ImplicitUsings>enable</ImplicitUsings>
控制(默认启用)。
- 作用范围:仅对当前项目有效,不影响引用的其他项目或类库。
- 文件位置:全局 using 可写在任意
.cs
文件中,但建议集中放在 GlobalUsings.cs
中,便于维护。
- 与普通 using 的关系:全局 using 不会替代文件内的
using
,文件内的 using
仍可补充或覆盖全局设置(如 using static
或别名)。
- 禁用隐式全局 Using:若不需要模板自动生成的全局 using,可在
.csproj
中关闭:
<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net8.0</TargetFramework><ImplicitUsings>disable</ImplicitUsings>
- 命名冲突:若全局 using 的命名空间存在类型冲突,仍需在文件内通过显式命名空间(如
System.Text.Json.JsonSerializer
)或 using
别名解决。
- 减少重复代码:避免在每个文件顶部重复声明常用命名空间(如
System
、System.Linq
)。
- 统一管理:集中维护项目级别的命名空间引用,便于团队规范。
- 简化新人上手成本:无需记忆或手动添加大量基础
using
指令。
- 项目中频繁使用的命名空间(如
System
、System.Collections.Generic
)。
- 框架 / 库特有的常用命名空间(如 ASP.NET Core 的
Microsoft.AspNetCore.Mvc
、Entity Framework Core 的 Microsoft.EntityFrameworkCore
)。
总结:Global Using 是 C# 10+ 中提升开发效率的实用特性,通过全局声明减少重复代码,尤其适合中大型项目或框架开发场景。
转自:https://furion.net/docs/globalusing
推荐大家在 Visual Studio
中安装 CodeMaid
插件(注意 2019
和 2022
版本),自动清理解决方案所有无用的 using
,结合 GlobalUsings.cs
非常棒!