C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明

https://blog.csdn.net/sD7O95O/article/details/84609820

早在本月12日,微软官方的.NET Blog发布了一篇名为《Building C# 8.0》的文章,介绍了很多C# 8.0的新特性。不过本文主要讨论的并不是C# 8.0的新特性,而是存在于这篇文章中的一段文字:

Most of the C# 8.0 language features will run on any version of .NET. However, a few of them have platform dependencies.

Async streams, indexers and ranges all rely on new framework types that will be part of .NET Standard 2.1. As Immo describes in his post Announcing .NET Standard 2.1, .NET Core 3.0 as well as Xamarin, Unity and Mono will all implement .NET Standard 2.1, but .NET Framework 4.8 will not. This means that the types required to use these features won’t be available when you target C# 8.0 to .NET Framework 4.8.

这里的文字说的是,文中所介绍的绝大部分C# 8.0的新特性都可以在任何版本的.NET上使用,唯独有个别的功能需要在特定版本的.NET上才能使用。比如,Async streams,indexers and ranges这些特性都需要依赖于由.NET Standard 2.1引入的新类型,根据Immo在他的博客中所述,.NET Core 3.0、Xamarin、Unity以及Mono都会实现.NET Standard 2.1,而.NET Framework 4.8却不会。这也就意味着,这些C# 8.0的新特性,无法在目标框架为.NET Framework 4.8的情况下使用,也就是说,这些C# 8.0的新特性,无法在经典的.NET环境中使用。如此看来,貌似与以前展示的.NET平台架构有所出入,因为新版本的.NET Framework并不实现.NET Standard 2.1。

我在2018年3月24日上海MVP线下技术交流活动中,分享过C#7.x的新特性,并且做了一场演示,展示了将C# 7.2 target到.NET Framework 2.0的工程,并在2.0的工程中使用C# 7.2的语法特性进行开发。由此看来,这是完全可行的,前提是,我所使用的开发库必须是可基于CLR 2.0运行的。你会发现,即使我使用C# 7.2,我仍然无法在一个2.0的工程中使用async/await的异步框架,原因是,async/await所依赖的TPL只能运行在4.0的CLR上,因此,C# 7.2可以target到.NET Framework 2.0,但是有一部分语言特性无法使用,这种情况同样发生在上面的C# 8.0上。

据此分析,.NET Standard 2.1引入新的API(比如Span<>)需要修改.NET的公共语言运行时(Common Language Runtime,CLR),这样的修改,对于.NET Core、Xamarin、Unity以及Mono这些重新设计的框架来说,应该更为方便;而对于经典.NET Framework这种具有历史特点的框架来说,或许并不那么直接容易,所以,.NET团队推后了经典.NET CLR的变更计划,由此也就推后了.NET Framework对于C# 8.0新特性的支持计划,因此,.NET Framework 4.8仍然只支持.NET Standard 2.0,部分C# 8.0的新特性无法使用。

经典.NET Framework的公共语言运行时(CLR)在整个.NET的发展进程中也就只出现过4个版本:1.0/1.1/2.0/4.0。 1.0和1.1基本上可以忽略不计了,估计现在已经没有什么项目在用这两个版本相对应的.NET Framework了。让大家最为熟知的是.NET CLR 2.0和4.0的版本:CLR 2.0随着Visual Studio 2005的发布,直到Visual Studio 2010的CLR 4.0,一共有5年时间;而2010年随着Visual Studio 2010一起发布的.NET CLR 4.0,至今也有近9年的历史了。随着.NET Standard API的不断扩展,相信不久的将来,我们会迎来一次CLR的版本升级,使得经典.NET Framework能够更好地支持.NET Standard API以及新的编程语言特性,契合整个.NET的平台架构。

原文地址:http://sunnycoding.cn/2018/11/27/csharp8-net-framework-4-8-and-net-standard-2-1-side-note/

C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明的更多相关文章

  1. Ibatis 异常:Unable to open connection to "oledb , provider V2.0.0.0 in framework .NET V2.0".

    在实际项目中使用了ibatis,然后在开发过程中遇到一些问题,最严重的就是这个“Unable to open connection to "Microsoft SQL Server, pro ...

  2. OAuth 2.0 Authorization Framework RFC

    Internet Engineering Task Force (IETF) D. Hardt, Ed.Request for Comments: 6749 MicrosoftObsoletes: 5 ...

  3. The OAuth 2.0 Authorization Framework: Bearer Token Usage

    https://tools.ietf.org/html/rfc6750 1.2. Terminology Bearer Token A security token with the property ...

  4. The OAuth 2.0 Authorization Framework

      The OAuth 2.0 Authorization Framework Abstract The OAuth 2.0 authorization framework enables a thi ...

  5. The OAuth 2.0 Authorization Framework OAuth2.0的核心角色code 扫码登录

    RFC 6749 - The OAuth 2.0 Authorization Framework https://tools.ietf.org/html/rfc6749 The OAuth 2.0 a ...

  6. .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别

    作为了解历史和眼睛或者过程,我们需要将 .Net Framwork ..Net. .Net Stander几个概念进行下理解. .net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的 ...

  7. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...

  8. 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用

    好久没写吐槽文章了,因为无尽的加班,也因为工作的变迁,又因为最近看了微软又尼玛发布什么什么,好受不了. 今年大专毕业第八个年头了,人也到了30,真是光阴荏苒啊.最近这一两年发生了很多事,让我自己倍受打 ...

  9. Unable to open connection to "Microsoft SQL Server, provider V1.0.5000.0 in framework

    解决办法:1 以管理员身份登陆2 找到ORACLE_HOME文件夹(D:\oracle\ora92),点右键,选属性——安全,在组或用户栏中选"Authenticated Users&quo ...

随机推荐

  1. ElasticSearch的matchQuery与termQuery区别

    matchQuery:会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到. termQuery:不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若 ...

  2. commonJS 和 ES6 模块化的不同

    commonjs 导出 module.exports={ add:function(){ console.log('add测试') } } 导入 var add=require('./add.js') ...

  3. 将数组,矩阵存入csv文件中

    我们在做各种模型训练时,往往会先将数据处理成矩阵,然后交给建模的人去训练.这时通常数据清洗者提交的是保存了矩阵的文件,一般为TXT或csv,接下来主要讲解我在实现这个过程中遇到的一些问题. impor ...

  4. 【oracle】oracle REGEXP_SUBSTR分割字符串

    REGEXP_SUBSTR的使用:通过REGEXP_SUBSTR进行数据分割: , LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <= LENGTH ...

  5. python之路-网络基础

    1.什么是网络: 通过网络设备将各个设备连接在一起,使用协议让设备之间可以通信,共享资源,这些组成了一个网络. 2.osi七层模式: 国际标准化组织(ISO)创建OSI(开放系统互联)参考模型,希望不 ...

  6. day21-python操作mysql1

    python的mysql操作 mysql数据库是最流行的数据库之一,所以对于python操作mysql的了解是必不可少的.Python标准数据库接口为Python DB-API, Python DB- ...

  7. VSTO:使用C#开发Excel、Word【6】

    Office主互操作程序集(PIA)在了解如何构建Office解决方案之前,您需要更详细地了解在.NET中与Office对象模型通信的托管程序集.用于与Office通话的托管程序集称为Office主互 ...

  8. Eclipse快捷键+遇到补充

    MyEclipse 快捷键1(CTRL) Ctrl+1 快速修复Ctrl+D: 删除当前行Ctrl+Q 定位到最后编辑的地方Ctrl+L 定位在某行Ctrl+O 快速显示 OutLineCtrl+T ...

  9. HTTPS加密原理(转)

    Header HTTP.HTTPS在我们日常开发中是经常会接触到的. 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议:使用浏览器打开网页, ...

  10. php多进程和多线程的比较

    前言 最近在学习php多进程和多线程的编程.说实话,这两样在工作中几乎都没有用到,毕竟php并不以异步处理擅长,对于网络请求同步处理可以解决绝大多数问题.但是既然有这样的机制,也了解一下,对于以后接触 ...