日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

.NET 6新特性试用 | 隐式using指令

發(fā)布時(shí)間:2023/12/4 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 6新特性试用 | 隐式using指令 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在使用《最小Web API》時(shí),我們發(fā)現(xiàn),相比以前的代碼,大量的using指令消失了:

using指令的主要作用是允許使用在命名空間中定義的類(lèi)型,而無(wú)需指定該類(lèi)型的完全限定命名空間。

那么,在.NET 6下為什么不需要了呢?

ImplicitUsings屬性

遍歷項(xiàng)目下的所有文件,最后在csproj中找到這樣一個(gè)屬性,應(yīng)該和using指令相關(guān):

將屬性值改成disable,則編譯失敗:

需要在文件頂部加上using指令:

也就是說(shuō),編譯時(shí)其實(shí)還是需要using指令的。

那它們寫(xiě)在哪了?

global using指令

打開(kāi)obj目錄(用于存放編譯過(guò)程中生成的中間臨時(shí)文件),在cs文件的對(duì)應(yīng)目錄發(fā)現(xiàn)了WebApplication1.GlobalUsings.g.cs文件:

原來(lái)using都寫(xiě)在這里了:

//?<auto-generated/> global?using?global::Microsoft.AspNetCore.Builder; global?using?global::Microsoft.AspNetCore.Hosting; global?using?global::Microsoft.AspNetCore.Http; global?using?global::Microsoft.AspNetCore.Routing; global?using?global::Microsoft.Extensions.Configuration; global?using?global::Microsoft.Extensions.DependencyInjection; global?using?global::Microsoft.Extensions.Hosting; global?using?global::Microsoft.Extensions.Logging; global?using?global::System; global?using?global::System.Collections.Generic; global?using?global::System.IO; global?using?global::System.Linq; global?using?global::System.Net.Http; global?using?global::System.Net.Http.Json; global?using?global::System.Threading; global?using?global::System.Threading.Tasks;

global using的官方文檔說(shuō)明如下:

向 using 指令添加 global 修飾符意味著 using 將應(yīng)用于編譯中的所有文件(通常是一個(gè)項(xiàng)目)

也就是說(shuō),對(duì)于任何命名空間,無(wú)需再在每個(gè)文件上寫(xiě)using指令,只需在一個(gè)文件中寫(xiě)global using指令即可。

而WebApplication1.GlobalUsings.g.cs文件是基于ImplicitUsings屬性設(shè)置自動(dòng)生成的。

那么,為啥會(huì)自動(dòng)包含這些命名空間呢?

GenerateGlobalUsings任務(wù)

使用MSBuild Structured Log Viewer(使用方法請(qǐng)參看《天吶!你知道MSBuild都干了些什么》)查看MSBuild的輸出日志,可以看到WebApplication1.GlobalUsings.g.cs文件是由GenerateGlobalUsings任務(wù)生成的:

而任務(wù)參數(shù)數(shù)據(jù)來(lái)源于Using參數(shù):

<GenerateGlobalUsings?Usings="@(Using)"><Output?TaskParameter="Lines"?ItemName="_GlobalUsingLines"?/> </GenerateGlobalUsings>

而具體值來(lái)源于項(xiàng)目引用的SDK:

結(jié)論

了解原理后,我們可以使用項(xiàng)目文件,即可增加我們的自定義global using:

<ItemGroup><Using?Include="GlobalUsingDemo"?/> </ItemGroup>

利用隱式using指令,再也不用在cs文件中寫(xiě)using指令了!

如果你覺(jué)得這篇文章對(duì)你有所啟發(fā),請(qǐng)關(guān)注我的個(gè)人公眾號(hào)”My IO“

總結(jié)

以上是生活随笔為你收集整理的.NET 6新特性试用 | 隐式using指令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。