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 ...
随机推荐
- shell shell基本概述
SHELL的概念 SHELL是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell来启动,挂起,停止甚至是编写一些程序. Shell还是 ...
- Win10系列:UWP界面布局基础6
资源合并 前面提到过,可以将资源字典定义在单独的XAML文件中,这样的文件被称为资源字典文件.那么,在需要引用文件中的资源时可以通过ResourceDictionary元素的MergedDiction ...
- Win10系列:WinJS库控件
在介绍了如何使用标准的HTML控件以及WinJS库中提供的新控件之后,下面来着重介绍WinJS库中几种常用的控件. (1)ListView控件 在开发Windows应用商店应用时可以使用ListVie ...
- leetcode ----ARRAY TWOSUM
代码的(判断nums[i]或者是target-nums[i]都可以):
- Linux查看当前使用的网卡 以及 查看某进程使用的网络带宽情况 以及 端口占用的情况
一:Linux查看当前使用的网卡 ifconfig命令可以查看当前linux 系统有多少个网卡. [app@p2-app2 ~]$ ifconfig br-2e5b046a02d5: ...
- mysql存储过程造数
性能测试时,数据库表通常需要很多数据,此时我们可以用存储过程来造数,以下代码mysql.Oracle都可以用 首先,先查看数据库表的设计,可以看到每张表有多少字段,分别都是什么类型,哪个字段是自动增长 ...
- fastjson 在 springboot中的运用
题记: 项目中开始用是Gson,但是压力测试的时候会出现性能下降明显,不得已换成了fastjson 1.首先引用包 <dependency> <groupId>com.alib ...
- UBUNTU 测试跑分
time echo "scale=5000; 4*a(1)" | bc -l -q3.14159265358979323846264338327950288419716939937 ...
- matlab中hold on 和hold off功能的区别
hold off 使但当前轴及图形不具备被刷新的性质 hold on和hold off是相对使用的 前者为,你在当前轴(坐标系)中画了一幅图,再画另一幅是,原来的图还在,与新图共存,都看得到: 后者表 ...
- 5-log4j2.xml配置文件各个节点详解
具体配置参考官网:http://logging.apache.org/log4j/2.x/manual/configuration.html 一.log.xml文件的大致结构 <?xml ver ...