.NET Standard 2.0 是什麼?可以吃嗎?

转自http://blog.darkthread.net/post-2016-09-27-net-standard-2-0.aspx  黑暗执行者

.NET Standard 2.0 是什麼?可以吃嗎?

這幾天(9/26-30) Microsoft Ignite 2016(去年起由 Ignite 取代 TechEd)正在美國如火如荼召開,乍見一個新名詞-.NET Standard 2.0。我得了一種聽到新名詞就會焦慮的病,趕緊查資料壓壓驚…

.NET Team Blog 同步貼了一篇介紹文,可說是目前最詳細最權威的資料來源,抱著懂個大概就好的心態,整理重點如下。

先用兩張圖說明為什麼沒事要搞出一套 .NET Standard 新標準?(註:圖片取自 MSDN Blog 文章

.NET Standard 的核心使命在於解決 .NET 跨平台時基礎程式庫不一致的問題。.NET 發展至今,已初步實現跨平台, 用 C# 就可以寫 Windows、macOS、Linux、iOS、Android 程式。但如下圖所示,.NET Framework BCL、.NET Core Library 與 Xamarin 的 Mono Class Library 各自發展,缺乏統一的介面標準,像是System.Collections, System.IO, System.Xml… 這類性質的基礎類別,各家支援程度不一,某些 API 可能在某個平台不存在,又或者 API 介面存在差異。

如果你只專注一種平台,當然可以無視各平台基礎程式庫的差異,專心學好一種就好。但如果系統被要求跨平台,差異那怕再小,都會跑出來咬你屁股。首先,你必須搞懂不同平台的差異,第二,差異提高「跨平台共同程式庫/元件」開發的難度。(腦海中出現一堆噁心的 #if NETCORE … #elif XAMARIN … #endif) 。

過去針對跨平台共用程式庫的主推做法是PCL(Portable Class Library),取多個平台的交集,篩選保留各平台都支援的 API,但開發者仍需知道不同平台的差異。.NET Standard 則試圖規範一套標準基礎程式庫 API 介面,各平台依此介面實作出一致的程式庫,如此程式碼不需修改即可針對不同平台編譯、執行。

即使有 .NET Standard,還是無法逃避各平台支援度不一的現況。.NET Standard 版本號碼與 API 完整度成正比,與支援平台範廣度成反比。.NET Standard 2.0 提供的 API 數目一定比 1.0 多,但如果想涵蓋 Windows Phone 8.1,就只能選擇 .NET Standard 1.0 – 1.2。

隨著 .NET Standard 2.0 制定,.NET Core 與 Xamarin 將在新版加入支援,而 .NET Framework 4.6.1 則已符合 2.0 標準。有沒有注意上表的玄機?.NET Standard 1.4 對應到 .NET Framework 4.6.1、1.5 對 4.6.2,結果 2.0 又倒車回到 4.6.1,原來是基於部署普及率考量,.NET Standard 2.0 拿掉 1.5/1.6 增加但應用不廣的 API,好讓 .NET Framework 4.6.1 符合 .NET Standard 2.0。各位同學,今天我們要介紹的成語是-「削足適履」~(笑 )

以下是 .NET Standard 2.0 的主要涵蓋範圍,細節則參考 github 上的文件。 .NET Standard 2.0 仍在發展中,未來可能還會有變動。

至於一些與平台高度相關的 API,例如:只有 Windows 才有的 Registry、Reflection Emit 功能不適用 .NET Native、UWP、Xamarin iOS。.NET Standard 採取「需額外安裝 NuGet Package 才能使用,在不適用平台執行時拋出例外」的原則,不同的 API 處理方式不一。

如果你需要開發跨平台程式庫,官方建議改走 .NET Standard,以降低平台相依性,並允許混合參照 PCL 及 .NET Framework,但 PCL 仍適用特定場合,例如:某些平台不在 .NET Standard 支援之列,PCL 是唯一解。實作上有個 API Port 可偵測程式適用的最低 .NET Standard 標準,再配合檢查目標平台是否在該標準支援範圍,以便決定標準版本。

完整的 .NET Standard 工具支援將內建於下一版本 Visual Studio "Dev 15",以 NuGet Package 方式加入參照,而未來 Visual Studio、VSCode、Xamarin Studio 均會提供一線支援。

報告完畢。

时间: 2024-10-11 16:47:11

.NET Standard 2.0 是什麼?可以吃嗎?的相关文章

.NET Core 2.0及.NET Standard 2.0

.NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q3 2017发布,具体我估计大概在8月份左右.同时一起发布的也就是.NET Standard 2.0. Milestone Release Date .NET Core 2.0 Preview Q2 2017 .NET Standard 2.0 Preview Q2 2017 .NET Core 2

Introducing XAML Standard and .NET Standard 2.0

XAML Standard We are pleased to announce XAML Standard, which is a standards-based effort to unify XAML dialects across XAML based technologies such as UWP and Xamarin.Forms. XAML Standard is a specification that defines a standard XAML vocabulary. W

.NET Core 2.0及.NET Standard 2.0 Description

NET Core 2.0的发布时间,.NET Core 2.0预览版及.NET Standard 2.0 Preview大概在5月中旬或下旬发布. .NET Core 2.0正式版本发布时间大约在Q3 2017发布,具体我估计大概在8月份左右.同时一起发布的也就是.NET Standard 2.0. Milestone Release Date .NET Core 2.0 Preview Q2 2017 .NET Standard 2.0 Preview Q2 2017 .NET Core 2.

实际体验 .NET Standard 2.0 的魅力

在我们的 .net core 大迁移工程中,有些项目完成了迁移,有些还未迁移,这就带来了一个烦恼——我们自己开发的公用类库如何在 .net core 与 .net framework 项目中共享?如果不能共享,就得痛苦地针对同一个功能分别写 .net core 版与 .net framework 版.迁移开始的一段时间,我们就干了这样的傻事. 最近我们又遇到了这个问题,但今非昔比,如今已经有了为此而生的羽翼丰满的 .net standard 2.0 ,再加上 Artech 这篇醍醐灌顶的博文 .

[Xamarin] - Xamarin.Forms Project with .Net Standard 2.0

1. Install .NET Core 2.0 SDK .https://www.microsoft.com/net/download/core 2. Install Android 7.1 (API 25) SDK. 3. New .NET Standard Project With Nuget Update:Microsoft.EntityFrameworkCore.2.0.0Microsoft.EntityFrameworkCore.Sqlite.2.0.0Xamarin.Forms.2

一个还算简单的微信消息SDK(基于.Net Standard 2.0)

虽然微信公众号出现了好久,不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做,很多SDK做的事情就是一个代码的堆叠,当然也可能写的好的并没有开源出来.所以在某个翻遍Github而无所获的下午我写了一个基础的基于事件的微信消息类,今年初我把它放到了github和开源中国上并逐步完善,这篇文章就是简单介绍OSS开源系列下的微信消息模块SDK的使用方式,主要围绕以下几个方面分解: 一. 全局介绍 二. 配置管理 三. 框架使用 1. 框架组成元素 2. 框架支持的模式 四. 生命周

.NET Core 2.0和ASP.NET Core 2.0正式版抢先体验

.NET Standard 2.0 is final Broad platform support. .NET Standard 2.0 is supported on the following platforms: .NET Framework 4.6.1 .NET Core 2.0 Mono 5.4 Xamarin.iOS 10.14 Xamarin.Mac 3.8 Xamarin.Android 7.5 UWP is work in progress and will ship late

.Net Standard简介

.NET Standard 是一套正式的 .NET API 规范,有望在所有 .NET 运行时中推出. 推出 .NET Standard 的背后动机是要提高 .NET 生态系统中的一致性. ECMA 335 持续为 .NET 运行时行为建立统一性,但适用于 .NET 库实现的 .NET 基类库 (BCL) 没有类似的规范. Git源代码地址: https://github.com/dotnet/standard .NET Standard 可实现以下重要情境: 为要实现的所有 .NET 平台定义

【甘道夫】用贝叶斯文本分类测试打过1329-3.patch的Mahout0.9 on Hadoop2.2.0

引言 接前一篇文章<[甘道夫]Mahout0.9 打patch使其支持 Hadoop2.2.0> http://blog.csdn.net/u010967382/article/details/39088035, 为Mahout0.9打过Patch编译成功后,使用贝叶斯文本分类来测试Mahout0.9对Hadoop2.2.0的兼容性. 欢迎转载,转载请注明出处: http://blog.csdn.net/u010967382/article/details/39088285 步骤一:将20ne