.NET 6新特性试用 | 隐式using指令
前言
在使用《最小Web API》時,我們發現,相比以前的代碼,大量的using指令消失了:
using指令的主要作用是允許使用在命名空間中定義的類型,而無需指定該類型的完全限定命名空間。
那么,在.NET 6下為什么不需要了呢?
ImplicitUsings屬性
遍歷項目下的所有文件,最后在csproj中找到這樣一個屬性,應該和using指令相關:
將屬性值改成disable,則編譯失敗:
需要在文件頂部加上using指令:
也就是說,編譯時其實還是需要using指令的。
那它們寫在哪了?
global using指令
打開obj目錄(用于存放編譯過程中生成的中間臨時文件),在cs文件的對應目錄發現了WebApplication1.GlobalUsings.g.cs文件:
原來using都寫在這里了:
//?<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的官方文檔說明如下:
向 using 指令添加 global 修飾符意味著 using 將應用于編譯中的所有文件(通常是一個項目)
也就是說,對于任何命名空間,無需再在每個文件上寫using指令,只需在一個文件中寫global using指令即可。
而WebApplication1.GlobalUsings.g.cs文件是基于ImplicitUsings屬性設置自動生成的。
那么,為啥會自動包含這些命名空間呢?
GenerateGlobalUsings任務
使用MSBuild Structured Log Viewer(使用方法請參看《天吶!你知道MSBuild都干了些什么》)查看MSBuild的輸出日志,可以看到WebApplication1.GlobalUsings.g.cs文件是由GenerateGlobalUsings任務生成的:
而任務參數數據來源于Using參數:
<GenerateGlobalUsings?Usings="@(Using)"><Output?TaskParameter="Lines"?ItemName="_GlobalUsingLines"?/> </GenerateGlobalUsings>而具體值來源于項目引用的SDK:
結論
了解原理后,我們可以使用項目文件,即可增加我們的自定義global using:
<ItemGroup><Using?Include="GlobalUsingDemo"?/> </ItemGroup>利用隱式using指令,再也不用在cs文件中寫using指令了!
如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“
總結
以上是生活随笔為你收集整理的.NET 6新特性试用 | 隐式using指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# WPF MVVM模式Prism框架
- 下一篇: blazor wasm开发chrome插