C# 8.0、.NET Framework 4.8与NET Standard 2.1的一个说明
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的一个说明的更多相关文章
- 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 ...
- OAuth 2.0 Authorization Framework RFC
Internet Engineering Task Force (IETF) D. Hardt, Ed.Request for Comments: 6749 MicrosoftObsoletes: 5 ...
- 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 ...
- The OAuth 2.0 Authorization Framework
The OAuth 2.0 Authorization Framework Abstract The OAuth 2.0 authorization framework enables a thi ...
- 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 ...
- .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别
作为了解历史和眼睛或者过程,我们需要将 .Net Framwork ..Net. .Net Stander几个概念进行下理解. .net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的 ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
- 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用
好久没写吐槽文章了,因为无尽的加班,也因为工作的变迁,又因为最近看了微软又尼玛发布什么什么,好受不了. 今年大专毕业第八个年头了,人也到了30,真是光阴荏苒啊.最近这一两年发生了很多事,让我自己倍受打 ...
- 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 ...
随机推荐
- laravel 的 intervention-image 图像处理笔记(备用)
原文地址: http://blog.csdn.net/beyond__devil/article/details/62230610
- POJ 3126 Prime Path bfs, 水题 难度:0
题目 http://poj.org/problem?id=3126 题意 多组数据,每组数据有一个起点四位数s, 要变为终点四位数e, 此处s和e都是大于1000的质数,现在要找一个最短的路径把s变为 ...
- shell脚本总结
1.变量 A: 定义变量A=1,只会对自己所在的shell进程有效 B: 定义变量export B=1,会对自己所在的shell进程及其子进程生效 C: 在script.sh脚本中定义的变量,在当前 ...
- 踩坑 net core
webclient 可以替换为 HttpClient 下载获取url的内容: 证书: https://stackoverflow.com/questions/40014047/add-client ...
- Buffer与Cache区别 简要说明
Buffer – 缓冲区 写 用户写入数据存储区域 解决写入冲突 CPU-Memoury-Disk Cache – 缓存区 读 用户读取缓存数据使用 临时存储 Disk-memo ...
- windows文件映射
0x01 使用文件映射实现共享内存. 用内存映射文件实现进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在进程中保留一段内存区域,把硬盘或页文件上的目标 ...
- DevExpress WinForms使用教程:Data Grid - Find Panel模式
[DevExpress WinForms v18.2下载] DevExpress WinForms用户都熟知,Data Grid是整个产品线的主要产品.在v18.2中添加了一些新的功能,例如之前教程中 ...
- CSS学习笔记-03- 过渡模块之前奏篇 a标签的伪类选择器
CSS3 2D转换CSS3 3D转换CSS3 过渡CSS3 动画 CSS3 的四大金刚. 想要实现酷炫的视觉效果,上面4个是必须要掌握的.学习之前,先复习一下 视觉盛宴的前菜 :a标签的伪类选择器 铛 ...
- linux自动更新代码,自动备份数据库,打包应用发布
切换root用户 sudo su - 1.安装svn,mysql yum install subversion yum install mysql 2.安装 maven 下载:百度云盘地址为 http ...
- 循环神经网络-Dropout
dropout 是 regularization 方法,在rnn中使用方法不同于cnn 对于rnn的部分不进行dropout,也就是说从t-1时候的状态传递到t时刻进行计算时,这个中间不进行memor ...