什么是.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 跨平台“蔓延”?的更多相关文章

  1. Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...

  2. .net core程序中使用微软的依赖注入框架

    我之前在博文中介绍过Asp.net core下系统自带的依赖注入框架,这个依赖框架在Microsoft.Extensions.DependencyInjection中实现,本身并不是.net core ...

  3. 使用vscode开发调试.net core应用程序并部署到Linux跨平台

    使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发及调试. https://github.com/aspnet/ ...

  4. ASP.NET Core 源码阅读笔记(3) ---Microsoft.AspNetCore.Hosting

    有关Hosting的基础知识 Hosting是一个非常重要,但又很难翻译成中文的概念.翻译成:寄宿,大概能勉强地传达它的意思.我们知道,有一些病毒离开了活体之后就会死亡,我们把那些活体称为病毒的宿主. ...

  5. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  6. Visual Studio 2017使用Asp.Net Core构建Angular4应用程序

    文章转载请著名出处:http://www.cnblogs.com/smallprogram 你需要了解的名词 1. NodeJS,这是一个基于Chrome V8 JavaScript引擎构建的Java ...

  7. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  8. Net Core构建Angular4应用程序

    在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序   前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1 ...

  9. AspNetCore.Hosting

    Microsoft.AspNetCore.Hosting 有关Hosting的基础知识 Hosting是一个非常重要,但又很难翻译成中文的概念.翻译成:寄宿,大概能勉强地传达它的意思.我们知道,有一些 ...

随机推荐

  1. 借助ltp 逐步程序化实现规则库 文本生成引擎基于规则库和业务词库 去生成文本

    [哪个地方做什么的哪家靠谱?地名词库行业.业务词库]苏州做网络推广的公司哪家靠谱?苏州镭射机维修哪家最专业?昆山做账的公司哪家比较好广州称重灌装机生产厂家哪家口碑比较好 [含有专家知识]郑州律师哪个好 ...

  2. CRM IFD 部署在同一台服务器上遇到的错误

    为了学习Dynamics 365,在阿里去上部署一台Dynamics 365服务器.然后实现了IFD 部署.学习的路线还之前的CRM 版本大致一样,这里只是记录一下我遇到的问题及解决问题的思路. 学习 ...

  3. 【繁琐工作自动化】pandas 处理 excel 文件

    0. 一般处理 读取 excel 格式文件:df = pd.read_excel('xx.xlsx'),下面是一些简单查看文件内容的函数: df.head():展示前五行: df.columns:展示 ...

  4. 创建oracle数据库job服务

    创建oracle数据库job服务:PlSqlDev操作job https://www.baidu.com/link?url=5vXhw0IqjvWEAgGSIYsSEVPvJb6njGkJ-_P_VF ...

  5. 2018.10.20 XMYZ Day1总结

    上周的忘写了……题目没有作者…… T1.backpack 期望得分100,实际得分100. 感觉我自己真是不如以前了……以前做这种题都是秒掉的,现在怎么想了10分钟啊…… 因为物品的体积和价值都非常小 ...

  6. python-----贴图 和 报错:OSError: image file is truncated (8 bytes not processed)的处理

    将一张图片贴到另一张图片上,代码如下: from PIL import Image import os from PIL import ImageFile ImageFile.LOAD_TRUNCAT ...

  7. less 使用入门

    LESSS是基于JavaScript,所以,是在客户端处理的. 使用less很简单: 1 下载less.js 2 新建less文件后缀名称是.less 3 在页面中引入less文件,跟引入普通的css ...

  8. VS2012上添加SharePoint2013模板,SharePoint2013 Tool安装配置

    今天需要在SharePoint2013上做开发,但是安装的VS2012默认只有sharepoint2010的模板,因此需要安装配置好,这里我们通过Web平台安装程序4.0来配置的 Web 平台安装程序 ...

  9. 解决axios IE11 Promise对象未定义

    在你的项目中安装polyfill Babel Polyfill 按照官网方法安装并引入即可 http://blog.csdn.net/panyox/article/details/76377248

  10. bzoj 2157: 旅游【树链剖分+线段树】

    裸的树链剖分+线段树 但是要注意一个地方--我WA了好几次才发现取完相反数之后max值和min值是要交换的-- #include<iostream> #include<cstdio& ...