架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22114|回复: 8

[资料] 【实战】C# 10 新语法 global using 全局引用

[复制链接]
发表于 2021-11-20 10:55:01 | 显示全部楼层 |阅读模式
using 指令允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。向 using 指令添加 global 修饰符意味着 using 将应用于编译中的所有文件(通常是一个项目)。 global using 指令被添加到 C# 10 中。 其语法为:

推荐做法是,将全局导入放在一个单独的文件中(每个项目一个),例如可以命名为:GlobalUsings.cs 文件。

微软官方文档介绍:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/using-directive

我们将 Startup.cs 引用的命名空间,放入到 GlobalUsings.cs 文件里面,记得 using 前面需要加 global 关键字!!!代码如下:


这时候编译器会报错,提示“功能全局 using 指令在 c# 8.0 中不可用,请使用语言版本 10.0 或更高版本”,如下图:

QQ截图20211120101201.jpg

这时候,以 ASP.NET Core 3.1 项目为例,只需要双击项目(.csproj文件),在 Project -> PropertyGroup 节点添加 LangVersion 即可,如下图:



QQ截图20211120101541.jpg

这句话的意思是项目使用 C# 10 的语法,关于C# 语言版本控制:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/configure-language-version

文件不在报错,同时 Startup.cs 文件引用的命名空间变成了灰色,提示“using 指令是不需要的”,如下图:

QQ截图20211120102443.jpg QQ截图20211120102515.jpg

我们删除 Program.cs、Startup.cs 的引用,然后重新编译项目,如下图:

QQ截图20211120102807.jpg

使用 ILSpy_binaries_7.2.0.6702-preview2 反编译生成的 WebApplication1.dll 文件,如下图:

QQ截图20211120103609.jpg

Startup 文件还是会有 using 引用,并没有生成 GlobalUsings.cs 文件,所以 global using 只是语法糖而已,简化了编程一些繁琐的工作,大大提升了工作效率。

.NET 6 的隐式命名空间引用,也是利用 global using 特性来实现的。

目前针对不同的 SDK 类型会添加不同的默认 namespace,目前已有的如下:

针对 Microsoft.NET.Sdk,默认的命名空间如下:


针对 Microsoft.NET.Sdk.Web:

针对 Microsoft.NET.Sdk.Worker:

如果你想禁用隐式命名空间引用,可以通过 DisableImplicitNamespaceImports 来完全禁用这个功能,配置如下:

如果你只是想禁用针对 Microsoft.NET.Sdk.Web 的引用则可以配置 DisableImplicitNamespaceImports_Web,配置如下:

我们新建一个 .NET 6.0 的控制台项目进行测试,整个项目只有 Program.cs 一个文件,如下图:

QQ截图20211120105036.jpg

ConsoleApp1.csproj 默认配置如下:

global using 指令写在哪里了呢?打开 obj 目录(用于存放编译过程中生成的中间临时文件),在 Debug\net6.0 目录发现了 ConsoleApp1.GlobalUsings.g.cs 文件:

QQ截图20211120105259.jpg

ConsoleApp1.GlobalUsings.g.cs 文件是基于项目 ImplicitUsings 属性设置自动生成的。

(完)




上一篇:Visual Studio 2022 企业版下载安装教程
下一篇:【实战】使用 Nginx 反向代理 Windows 远程桌面
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-11-21 19:26:44 | 显示全部楼层
新东西,学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-11-21 23:09:21 | 显示全部楼层
又来学习学习。。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-1 10:07:39 | 显示全部楼层
威武威武威武威武威武威武威武威武威武威武威武威武威武威武
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-2-8 09:28:46 | 显示全部楼层

新东西,学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-2-8 09:29:19 | 显示全部楼层


新东西,学习一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-3-12 17:52:27 | 显示全部楼层
移除默认的某个引用,编辑项目文件,代码如下:

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-3-19 20:57:25 | 显示全部楼层
文件路径:"C:\Program Files\dotnet\sdk\6.0.200\Sdks\Microsoft.NET.Sdk.Web\Sdk\Sdk.props"

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-2-20 16:23:50 | 显示全部楼层
666发现新大陆
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-24 00:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表