.NET Standard 2.1 發布,進一步使 .NET 實現一致

2020-12-25 開源中國

微軟在11月5日發布了 .NET Standard 2.1 ,開發團隊計劃在 .NET Standard 2.1 中添加大約 3000 個 API ,其中很大一部分都是全新的,另外一部分則是添加到標準中的現有 API ,以便進一步使 .NET 實現一致。

繼續閱讀以了解有關此最新版本中新功能的更多信息,以及有關平臺支持、治理和編碼的信息。

更新亮點

  • Span<T>。在 .NET Core 2.1 中,開發團隊添加了一個類似於數組的類型 Span<T>,它允許以統一的方式表示託管和非託管內存,並支持切片而無需複製。它是 .NET Core 2.1 中與性能相關的大多數改進的核心。由於它允許以更有效的方式管理緩衝區,因此可以幫助減少內存分配和複製。Span<T> 被認為是一種非常基礎的類型,因為它需要運行時和編譯器支持才能充分利用。

  • 使用 span 的基礎 API。雖然 Span 已經可以作為 .NET Standard 兼容的 NuGet 包(System.Memor)使用,但添加此包不能擴展 .NET Standard 類型的成員去使用 span。.NET Core 2.1 添加了許多允許使用 span 的API,如  Stream.Read(Span) 。將 span 帶入 .Net Standard 的話,添加這些 API 是很重要的一部分。

  • 反射 emit。為了提高生產力,.NET 生態系統一直大量使用動態功能,如 reflection(反射)和 reflection emit 。Emit 通常被用作優化性能,以及為代理接口動態生成類型的方法。因此,許多人要求將 reflection emit 包含在 .NET standard 中。以前,開發團隊試圖通過 NuGet 包提供,結果發現無法使用包來模擬這樣的核心技術。使用 .NET Standard 2.1 ,你可以訪問輕量級代碼生成(LCG)以及reflection emit ,同時添加了兩個新的 API ,允許你檢查生成代碼的能力(RuntimeFeature.IsDynamicCodeSupported)以及生成的代碼是否被解釋或編譯(RuntimeFeature.IsDynamicCodeCompiled)。

  • SIMD。.NET Framework 和 .NET Core 支持 SIMD 已經有一段時間了,多被用於加速 BCL 中的基本操作,例如字符串比較。開發團隊收到了很多在 .NET Standard 中公開這些 API 的請求,因為這些功能需要運行時支持,因此無法作為 NuGet 包提供。

  • ValueTask 和 ValueTask<T>。在 .NET Core 2.1 中,最大的亮點是對高性能場景的基礎知識的支持改進,其中還包含提高 async/await 效率。ValueTask 已經存在,並且如果操作同步,則允許返回結果,而無需分配新的 Task。在 .NET Core 2.1 中,開發團隊進一步對其進行改進,使得有一個相應的非泛型 ValueTask 變得很有用。它允許減少分配內存,即使是在必須異步完成操作的情況下也是如此。在 .NET Standard 2.1 中公開這些 API 將使庫作者能夠作為消費者和生產者從中受益。

  • DbProviderFactories。在 .NET Standard 2.0 中,開發團隊在 ADO.NET 中添加了幾乎所有的基礎類型(Primitives),以允許 ORM 和資料庫實現者進行通信。不幸的是,當時 DbProviderFactories 未在其中,新版本已將其補上。簡而言之,DbProviderFactories  允許庫和應用在編譯時使用特定的 ADO.NET 提供程序而無需知道任何特定類型,方法是在基於名稱的已註冊 DbProviderFactory 實例中進行選擇,例如,可以從配置設置中讀取。

  • General Goodness。自從  .NET Core 開源後,基礎類庫中已添加許多小功能,例如 System.HashCode 用於組合 hash code 或 System.String 上的新的重載。.NET Core 中大約有800個新成員,且幾乎都加入了 .NET Standard 2.1。

有關更多詳細信息,您可能需要查看 .NET Standard 2.1 和 2.0 之間的完整 API 差異。您還可以使用 apisof.net 快速檢查 .NET Standard 2.1 中是否包含某些 API。

更多內容可查閱發行說明:https://blogs.msdn.microsoft.com/dotnet/2018/11/05/announcing-net-standard-2-1/

.NET 平臺支持

如果您錯過了我們的 .NET Core 3.0 和 .NET Framework 4.8 更新,其中已經描述了我們對 .NET Framework 和 .NET Core 的支持,如下所示:

  • .NET Framework 是 .NET 的實現,它安裝在超過 10 億臺計算機上,因此需要保持儘可能的兼容。因此,它的更新速度要比 .NET Core 慢。即使安全性和小錯誤修復也會導致應用程式中斷,因為應用程式依賴於先前的行為。我們將確保 .NET Framework 始終支持最新的網絡協議、安全標準和Windows 功能。

  • .NET Core 是 .NET 的開源、跨平臺和快速移動版本。由於它的 side-by-side 性質,它可以進行一些無法在 .NET Framework 上冒險進行的修改。這意味著 .NET Core 將隨著時間的推移獲得 .NET Framework 無法獲得的新 API 和語言功能。在 Build 大會中,我們展示了 .NET Core 上文件 API 如何比之前更快。如果我們將這些相同的更改放入 .NET Framework ,我們可能會破壞現有的應用程式,我們不希望這樣做。

鑑於 .NET Standard 2.1 中的許多 API 添加需要修改運行時才能有意義,.NET Framework 4.8將保留在 .NET Standard 2.0 上,而不是實現 .NET Standard 2.1 。.NET Core 3.0 以及即將推出的 Xamarin,Mono 和 Unity 版本將更新以實現 .NET Standard 2.1。

需要支持 .NET Framework 客戶的庫作者應該繼續使用 .NET Standard 2.0。實際上,大多數庫都可以保留在 .NET Standard 2.0 上,因為新添加的 API 主要用於高級場景。但是,這並不意味著庫作者無法利用這些 API,即使他們必須支持 .NET Framework。在這些情況下,他們可以使用多目標來編譯 .NET Standard 2.0 和 .NET Standard 2.1。這允許編寫可以暴漏更多特性的代碼,或者在支持 .NET Standard 2.1 的運行時上提供更高效的實現,同時不放棄 .NET Standard 2.0 提供的更大的支持範圍。

有關多目標的更多推薦,請查看跨平臺目標的最新文檔。

Governance model 治理模式

.NET Standard 1.x 和 2.0 版本專注於揭露現有概念。大部分工作都在 .NET Core 方面,因為該平臺從更小的 API 集開始。在前進的道路上,我們通常必須標準化全新技術,這意味著我們需要考慮對所有 .NET 實現的影響,而不僅僅是 .NET Core ,包括在其他社區(如 Mono 或 Unity )中管理的那些。我們的治理模式已經更新,來考慮所有因素:

.NET Standard 審核委員會。為確保我們不會最終添加無法實現的大量 API,審核委員會將籤署有關 .NET Standard 的 API 添加內容。該委員會由 .NET 平臺、Xamarin、Mono、Unity 和 .NET Foundation 的代表組成,將由 Miguel de Icaza 擔任主席。我們將繼續努力根據共識做出決策,並將利用 Miguel 的廣泛專業知識和經驗來構建 .NET 的實現,並在需要時得到多方的支持。

正式批准流程。.NET Standard 1.x 和 2.0 版本在很大程度上是通過計算現有 .NET 實現的 API 共同來實現的,這意味著 API 集實際上是計算結果。展望未來,我們正在實施一種社區策略:

  • 任何人都可以向 .NET Standard 提交 API 添加建議

  • 默認認為已有實現中的成員存在 Standard 中。為了防止意外的分裂,我們將默認認為任何 .NET 實現已經添加的所有成員已經存在在 Standard 中。這裡的基本原則是成員級別的分歧是不可取的,除非API 出現問題,否則很可能是一個很好的補充。

  • 驗收要求:



  • .NET Standard 更新是由計劃的,通常會遵循一組主題。我們避免發布大量不屬於一組常見方案的微小功能。相反,我們嘗試定義一組目標,以描述特定 .NET Standard 版本提供的功能區域類型。這簡化了某些庫應該依賴於 .NET Standard 的問題。它還使 .NET 實現更容易決定是否值得實現更高版本的 .NET Standard。

  • 版本號需要經過討論,通常它是很重要的。雖然我們不打算進行重大更改,但如果新版本添加了大量API(例如,當我們將 .NET Standard 2.0 中的 API 數量增加一倍時),或者整個開發體驗有了相當大的改變,我們將修改 major 版本(就像我們在 .NET Standard 2.0 中添加的.NET Framework 庫一樣,增加了兼容性模式)。

有關更多信息,請查看 .NET Standard 治理模式和 .NET 標準審核委員會。

總結

.NET Standard 2.1 的定義正在進行中。您可以在 GitHub 上觀看我們的進度並提出請求。

如果要快速檢查特定 API 是否在 .NET Standard(或任何其他.NET平臺)中,可以使用 apisof.net 。您還可以使用 .NET 可移植性分析器檢查現有項目是否可以移植到.NET Standard 2.1。

Happy coding!

部分內容來自:https://www.cnblogs.com/Rwing/archive/2018/11/06/announcing-net-standard-2-1.html

相關焦點

  • [圖]微軟停止更新 .NET Standard 今後轉向.NET 5
    它是一套所有.NET 平臺都必須實現的 API,它統一了.NET 平臺,防止了未來的碎片化。在近日更新的博文中微軟表示未來不再發布新的 .NET Standard 版本。● 使用 netstandard2.0 在 .NET Framework 和所有其他平臺之間共享代碼。● 使用 netstandard2.1 在 Mono、Xamarin 和 .NET Core 3.x 之間共享代碼。● 使用 net5.0 進行代碼共享前進。
  • 如何實現Asp與Asp.Net共享Session
    在.net中,Session的存儲機制已經與Asp的存儲機制不一樣,雖然可以在同一個IIS下同時運行asp與aspx,但是它們之間不能傳遞Session。簡單說明原理,asp與asp.net之間的Session統一存儲在資料庫中來實現共享 1、創建數據表 打開SQL Server查詢分析器,運行以下腳本來創建數據表,數據表名為SessionState if exists (select * from sysobjects where id = object_id
  • 基於netX90晶片實現PROFIBUS DP從站的開發
    netX90晶片作為赫優訊新推出的功能強大的SoC,可實現主流的實時乙太網PROFINET Device、EtherCAT Slave、EthernetIP Adapter等通訊產品的開發,也可實現現場總線PROFIBUS DP從站的開發。
  • .net framework 4.0 64位下載|.net framework 4.0 64位官方下載...
    .NET Framework 旨在實現下列目標:*提供一個一致的面向對象的編程環境,而無論對象代碼是在本地存儲和執行,還是在本地執行但在 Internet 上分布,或者是在遠程執行的.Cryptographic Services」服務清空catroot2文件夾再啟用「Cryptographic Services」服務,完成這些步驟後,依舊那樣提示,不可行;第二次失敗的嘗試:1.在win7的C:/Windows/System32目錄裡面右鍵cmd.exe以管理員方式運行2.上面的cmd命令行裡面輸入 net stop WuAuServ
  • DenseNet——CNN經典網絡模型詳解(pytorch實現)
    雖然這些不同的網絡框架通過不同的實現加深的網絡層數,但是他們都包含了相同的核心思想,既將feature map進行跨網絡層的連接.在傳統的卷積神經網絡中,如果你有L層,那麼就會有L個連接,但是在DenseNet中,會有L(L+1)/2個連接。簡單講,就是每一層的輸入來自前面所有層的輸出。
  • mobilenet系列之又一新成員---mobilenet-v3
    ,mobilenet-v3提供了兩個版本,分別為mobilenet-v3 large 以及mobilenet-v3 small,分別適用於對資源不同要求的情況,論文中提到,mobilenet-v3 small在imagenet分類任務上,較mobilenet-v2,精度提高了大約3.2%,時間卻減少了15%,mobilenet-v3 large在imagenet分類任務上,較mobilenet-v2
  • net的意思是網,net result是什麼意思呢?
    1、His aunt wants to buy net curtains.他阿姨想買網眼窗簾。這句話中net的意思是網、網狀物。2、He let the ball slip through his grasp and into the net.球從他的掌中滑出,鑽進了球門。
  • ASP.NET 2.0中DataTable小兵變大將
    中,這是典型的一個錯誤,在.net1.1、1.0中,WEBService的返回或者輸入參數不能是DataTable,這是一個眾人皆知的知識點。在.net1.1中,我們解決這個問題的方法就是使用DataSet。但是使用DataSet的時候,經常會有一種殺雞用牛刀的感覺。
  • .net域名簡介
    .net域名適用範圍NET代表「網絡」,.net域名建議適用於網際網路、電子郵件和網絡服務提供商。如果要提供網際網路、網絡、資料庫託管、電子郵件託管或類似服務,則應使用.net 後綴的域名。如果適合行業品牌,仍然可以使用.net 域名。
  • .NET面試寶典(開篇):通俗易懂,什麼是.NET?什麼是.NET Framework?什麼是.NET Core?
    微軟公司是全球最大的電腦軟體提供商,為了佔據開發者市場,進而在2002年推出了Visual Studio(簡稱VS,是微軟提供給開發者的工具集) .NET 1.0版本的開發者平臺。而為了吸引更多的開發者湧入平臺,微軟還在2002年宣布推出一個特性強大並且與.NET平臺無縫集成的程式語言,即C# 1.0正式版。
  • 醫學統計與R語言:運用netmeta包實現網狀Meta分析
    微信公眾號:醫學統計與R語言簡介R 軟體netmeta 程序包是基於經典頻率學派研發的一款專用於實現網狀Meta 分析的程序包。10    10          F 89.50 3.57 40          K 88.09 2.51 40       <NA> NA  NA NA- 輸入2:netform<- pairwise(list(treatment1, treatment2,treatment3),
  • MXNet開放支持Keras,高效實現CNN與RNN的分布式訓練
    今日 AWS 發布博客宣布 Apache MXNet 已經支持 Keras 2,開發者可以使用 Keras-MXNet 深度學習後端進行 CNN 和 RNN 的訓練,安裝簡便,速度提升,同時支持保存 MXNet 模型。
  • try.dot.net 的正確使用姿勢
    來源:https://www.cnblogs.com/7tiny/p/10277600.html【簡介】  微軟官方前不久發布了
  • asp.net連接MySQL,在GridView上實現增刪改查:前臺配置參數實現
    asp.net中如果想要在GridView控制項上實現增刪改查,通過給GridView添加數據源就可以實現,前提是使用的資料庫必須是數據源中有的。在SqlDataSource控制項中添加數據源最方便的是使用SQLServer、Access資料庫,但是有很多項目也會用到mysql資料庫,但是SqlDataSource中沒有提供mysql資料庫的連接,所以如果想要在GridView中通過配置來實現增刪改查mysql資料庫,是比SQLserver資料庫複雜。
  • PointNet代碼解讀
    bn=True,is_training=is_training,                           scope='conv1',bn_decay=bn_decay)      net = tf_util.conv2d(net, 64, [1,1],                           padding='VALID',stride=[1,1],
  • NET Core 3.0發布了,JAVAer們更激動,為什麼?
    昨天,微軟的.NET Core 3.0發布了,作為.net開發的人正在歡呼的時候,JAVAer們不知道為什麼激動了。看看大家的情緒(部分摘要):1.你們還在吵架,說明Net還是不錯。要是哪天不吵架,這才可怕。2.其實,更有說服力的辦法是你也轉java吧。
  • MobileNet(v2)——CNN經典網絡模型詳解(pytorch實現)
    而且有人反映說MobileNet v1網絡中的DW卷積很容易訓練廢掉,效果並沒有那麼理想。所以我們接著看下MobileNet v2網絡。MobileNet v2網絡是由google團隊在2018年提出的,相比MobileNet V1網絡,準確率更高,模型更小。
  • .net的域名好嗎
    .net的域名好嗎?.net域名確實不如.com域名擴展受歡迎。然而,它有很多好處,註冊網站的.net域名或將.net作為選擇域名是明智的選擇。域名保護許多專家建議,除了.com後綴之外,還要購買網站的.net擴展名。這將避免競爭對手試圖使用相同的網站名稱與.net擴展名實施欺詐或冒充網站等行為。
  • 3D點雲 | 基於深度學習處理點雲數據入門經典:PointNet、PointNet++
    論文地址:https://arxiv.org/abs/1612.00593代碼地址:https://github.com/charlesq34/pointnet(原論文實現)https://github.com/fxia22/pointnet.pytorch(Pytorch實現)
  • 圖像分割的U-Net系列方法
    U-Net的一個Karas實現代碼:https://github.com/zhixuhao/unetU-Net的結構如下圖所示,左側可視為一個編碼器,右側可視為一個解碼器。編碼器有四個子模塊,每個子模塊包含兩個卷積層,每個子模塊之後有一個通過max pool實現的下採樣層。