C# 10 引入的 global using 指令,是为了减少重复的
using语句,让项目中所有源文件自动引入指定命名空间,无需在每个 .cs 文件顶部手动写一遍。
global using 放在哪?
必须放在项目的任意一个 C# 源文件(通常是
GlobalUsings.cs或
Program.cs)的最顶部,且要在任何
namespace声明和类型定义之前。它不是作用于单个文件,而是整个编译单元(即整个项目,默认情况下)生效。 推荐新建一个
GlobalUsings.cs文件,只放 global using 语句,清晰又集中 不能放在
namespace内部,否则会报错 可以多次使用,顺序无关,但重复引入同一命名空间不会出错
基本写法示例
直接在文件顶部写:
global using System; global using System.Collections.Generic; global using System.Linq; global using Microsoft.AspNetCore.Mvc;
这样,项目中所有 .cs 文件就自动拥有了这些 using,不再需要各自重复声明。
结合条件编译或目标框架
global using 支持预处理器指令,可按需控制引入范围:
#if NET6_0_OR_GREATER global using System.Text.Json; #endif <h1>if DEBUG</h1><p>global using Microsoft.Extensions.Logging;</p><h1>endif
适合跨框架项目或调试/发布环境差异较大的场景。
注意事项与常见问题
global using 是编译期特性,不改变运行时行为,但会影响代码补全和 IDE 识别。
如果某个文件想“屏蔽”某个 global using,无法直接取消,只能显式用完全限定名(如System.Console.WriteLine) 第三方库若自带 global usings(如某些 SDK 或模板),可能和你的冲突,注意检查生成的
obj/*.GlobalUsings.g.cs团队协作时建议统一管理 global using 文件,并加入文档说明,避免隐式依赖难排查
基本上就这些。合理使用 global using 能让代码更干净,尤其在 Web API、ASP.NET Core 项目中效果明显,但别为了省几行而过度引入不常用的命名空间。
