.Net Core 真能令微软的.Net 跨平台“蔓延”?
什么是.Net
.Net 本身就是基于公共语言基础架构(CLI)实现的平台独立的公共语言开发平台,只是自2006年成为规范以来的CLI,只有Windows自己支持罢了(mono除外)。微软的.Net Framework 就是CLI的实现,称之为CLR(公共语言运行时)。其核心部分就是对CLI的虚拟执行系统(VES)基于Windows的实现。CLR其实就相当于Java的虚拟机运行时JRE。本质上VES仅为编译成公共中间语言(CIL)指令码的应用提供虚拟执行环境。CIL之前被称之为MSIL,和原生汇编语言一样,是开发者不友好的。所以基于CIL,微软为开发者提供了开发.Net 应用程序的高级编程语言,如C#、F#及VB.Net等。
C#开发的.Net App为什么不能跨平台
公共语言基础架构(CLI)本身就是为跨平台设计的。但当初,微软应该是出于Windows的垄断考虑,根本就没打算基于其他的OS实现VES,所以C#的developer基本上都是Windows的developer了。C#的开发的应用系统基本上是基于Windows平台运行。
.Net Core 是什么,其如何实现跨平台
其实只要基于Linux实现CLI,主要是其VES,C#开发的app就可以在Linux上运行。 当然,由于过去的.Net Framework提供了很多特定于Windows上的UI框架 如WPF,Windows Forms,基于这些框架的APP只能是理论上可以在Linux上运行,但实际支持的代价会比较高,或许根本不现实。
所以, .Net Core诞生了。.Net Core就是对.Net Framework进行的裁剪 (把上述UI相关的framework去除),实现的一个类似于JRE一样的CLR,然后同时实现多个OS的VES,从而实现了跨平台。
微软为什么需要.Net Core
微软之所以愿意这么做,在某种程度上说,是被逼的,或者说是顺应历史潮流而为之。在当下,风起”云“涌的大环境下,得益于Azure,微软顺利从业已衰弱的Windows业务顺利转型到云服务提供商。而作为其所提供的云服务模式之一PaaS,必须能提供客户需要的OS,不仅仅是Windows。那么它当然希望Azure上的不同的操作系统运行的都是使用自己提供的开发技术开发的应用咯。
.Net Core 前景会风光无限吗
可是,通过虚拟执行环境实现开发的应用跨平台运行,JAVA从其诞生之日起就是这么做的。而时至今日,很多语言新秀争奇斗艳,被Oracle收购的JAVA都容颜渐老了。。。 C#真能依靠才实现了跨平台的.Net Core焕发第二春?
参考
CLI Specification
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf
.Net Core 真能令微软的.Net 跨平台“蔓延”?的更多相关文章
- Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...
- .net core程序中使用微软的依赖注入框架
我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...
- 使用vscode开发调试.net core应用程序并部署到Linux跨平台
使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发及调试. https://github.com/aspnet/ ...
- ASP.NET Core 源码阅读笔记(3) ---Microsoft.AspNetCore.Hosting
有关Hosting的基础知识 Hosting是一个非常重要,但又很难翻译成中文的概念.翻译成:寄宿,大概能勉强地传达它的意思.我们知道,有一些病毒离开了活体之后就会死亡,我们把那些活体称为病毒的宿主. ...
- 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- Visual Studio 2017使用Asp.Net Core构建Angular4应用程序
文章转载请著名出处:http://www.cnblogs.com/smallprogram 你需要了解的名词 1. NodeJS,这是一个基于Chrome V8 JavaScript引擎构建的Java ...
- 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- Net Core构建Angular4应用程序
在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序 前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1 ...
- AspNetCore.Hosting
Microsoft.AspNetCore.Hosting 有关Hosting的基础知识 Hosting是一个非常重要,但又很难翻译成中文的概念.翻译成:寄宿,大概能勉强地传达它的意思.我们知道,有一些 ...
随机推荐
- sql 语法树 常量
SELECT id,'|',url,'|',update_time FROM tab LIMIT 10;SELECT COUNT(1) AS parent,(SELECT COUNT(1) FROM ...
- mongo11---Access control is not enabled for the database
今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...
- 关于Vim的一个配置文件
昨天晚上+今天早上怒赶了一份关于Vim的自动化配置的Shell脚本,之前在github上见过一个这么一个类似的脚本项目,然后又见到同校的有一位师兄也写过这么一个类似的脚本文件,然后我也抽分跟着写一份属 ...
- 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays
题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...
- JavaScript实现对象的深度克隆及typeof和instanceof【简洁】【分享】
JavaScript实现对象的深度克隆 代码实现如下: <!DOCTYPE html> <html lang="en"> <head> < ...
- 【插件开发】—— 7 SWT布局详解,不能再详细了!
前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 前面几篇都提到了S ...
- Ubuntu18安装sublime 3
转自 https://blog.csdn.net/qq_41590417/article/details/80461075 wget -qO - https://download.sublimetex ...
- win7 右键菜单残影 消除方法
1. 治标法: 右键桌面->更改分辨率 随便换一个分辨率再还原就OK了! 2. 根治法: 我的电脑-> 属性 ->高级选项-> 高级-> 设置-> 自定义 不 ...
- ROS学习笔记三:编写第一个ROS节点程序
在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package). 1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...
- Java中的流(1)流简介
简介 1.在java中stream代表一种数据流(源),java.io的底层数据元.(比作成水管)2.InputStream 比作进水管,水从里面流向你,你要接收,read3.OutputStream ...