日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 6 即将到来的新特性 — 隐式命名空间引用

發布時間:2023/12/4 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 6 即将到来的新特性 — 隐式命名空间引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.NET 6 即將到來的新特性 —— 隱式命名空間引用

Intro

之前我們在? ASP.NET Core 6 Minimal API?中曾經提到過現在我們還是需要手動加命名空間引用,在以后的版本中可能就不需要手動加命名空間的引用了,確實是的。

今天看到一個更新,可以不需要寫 using了,目前還沒有正式發布,應該要到 .NET 6 Preview 7 才會支持。

Sample

還是以我們之前的 Minimal API 為例子

之前我們的示例可能是這樣的:

using?Microsoft.AspNetCore.Builder;var?app?=?WebApplication.Create(args); app.Map("/",?()?=>?"Hello?World"); app.Run();

或者結合 global using 之后把 using 放在一個單獨的 Imports 文件中,

Imports:

@global?using?Microsoft.AspNetCore.Builder;

Program:

var?app?=?WebApplication.Create(args); app.Map("/",?()?=>?"Hello?World"); app.Run();

在 .NET 6 Preview 7 中,我們將不需要再加 using 了,Preview 7 會包含一個新的特性——“隱式命名空間引用”,這個特性將會默認為你的項目添加常用的命名空間,我們就可以不再需要上面的 Imports 了

How it works

它的實現方式也是基于之前的 global using 特性來實現的,編譯器會根據 MS Build 中配置的命名空間生成一個 global using 的文件,就像上面的 Imports

目前針對不同的 SDK 類型會添加不同的默認 namespace,目前已有的如下:

針對 Microsoft.NET.Sdk,默認的命名空間如下:

System System.Collections.Generic System.IO System.Linq System.Net.Http System.Threading System.Threading.Tasks

針對 Microsoft.NET.Sdk.Web

System.Net.Http.Json Microsoft.AspNetCore.Builder Microsoft.AspNetCore.Hosting Microsoft.AspNetCore.Http Microsoft.AspNetCore.Routing Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging

針對 Microsoft.NET.Sdk.Worker

Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection Microsoft.Extensions.Hosting Microsoft.Extensions.Logging

如果你想禁用隱式命名空間引用,可以通過 DisableImplicitNamespaceImports 來完全禁用這個功能

<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>

如果你只是想禁用針對 Microsoft.NET.Sdk.Web 的引用則可以配置 DisableImplicitNamespaceImports_Web

<DisableImplicitNamespaceImports_Web>true</DisableImplicitNamespaceImports_Web>

配置對應關系:

SDKPropertyName
Microsoft.NET.SdkDisableImplicitNamespaceImports_DotNet
Microsoft.NET.Sdk.WebDisableImplicitNamespaceImports_Web
Microsoft.NET.Sdk.WorkerDisableImplicitNamespaceImports_Worker

后面應該會有更多的支持,具體還是要以最終 .NET6 正式發布時為準

我們也可以為我們的 library 啟用 global using 的功能,這樣在使用的時候也可以不加 using 直接使用

只需要打包的時候在項目文件中增加一個類似下面的 property 到項目里即可,微軟的大佬在這里有一個很好的示例 https://github.com/JunTaoLuo/GlobalUsings:

<Project><ItemGroup><GlobalUsings?Include="Library"?/></ItemGroup> </Project>

More

隱式命名空間引用能夠使得我們避免寫特別多重復的命名空間引用,對于簡單的測試應用來說會非常的方便

雖然隱式的命名空間引用能夠為我們大大簡化代碼,不需要再寫重復的 using 代碼,但是也有可能會對代碼造成沖突,比如自己定義的一個類,在自己的命名空間下和默認隱式引用的命名空間下都存在,此時就會造成沖突,如果不能移除默認的命名空間引用,那使用的時候就需要使用完全限定名或者別名可能會有點不太方便

References

  • https://github.com/dotnet/docs/issues/25066

  • https://github.com/dotnet/core/issues/6444

  • https://github.com/dotnet/sdk/pull/18459

  • https://github.com/JunTaoLuo/GlobalUsings

總結

以上是生活随笔為你收集整理的.NET 6 即将到来的新特性 — 隐式命名空间引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。