.NET Core全面扫盲贴
- 1. 前言
- 2. .NET Core 简介
- 2.1 .NET Core是什么
- 2.2 .NET Core的组成
- 2.3 .NET Core的特性
- 2.4 开发语言
- 3. Get Started
- 3.1 Win 10
- 3.1.1 安装.NET Core SDK和.NET Core Runtime
- 3.1.2 简单的运行结果
- 3.2 CentOS 7.2(本地Hyper-V)
- 3.2.1 安装和运行
- 3.2.2 Self-contained applications 发布
- (1) 修改project.json文件
- (2) 执行restore和publish操作
- (3) 在Linux平台上运行
- 3.1 Win 10
- 4. 总结
- 4.1 尾声
- 4.2 相关学习资料
- 5. 参考资料
1. 前言
.NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。
只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NET Core出现了,它让开发者们在官方和社区的支持走出了Windows,可以在macOS,Linux主流distributions上编写调试并部署.NET程序。
2. .NET Core 简介
2.1 .NET Core是什么
.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在GitHub上,由微软官方和社区共同支持。
它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于BCL的层面上看)。这是因为在当前版本中(1.0),.NET Core中的大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC, JIT, 部分类型)。
吐槽:只能感谢微软《CLR via C#》不用白看呀,我之前看了得有小半年才看完
现在的.NET Core 1.0版本是一个很小的核心,APIs和工具也并不完整,但是随着.Net Core的不断完善,补充的Apis和创新也会一起整合到.NET Framework中。也就是说,.NET Core微软会同时更新.NET Framework和.NET Core,他们就像俩兄弟,共同努力致富(致谁的富?当然是.NET开发者们),实现所谓的天下大同,也就是.NET 标准2.0
这里不得不提到一个叫做.NET Standard Library概念。作为.NET平台APIs开发官方支持标准,它要求所有的.NET框架APIs都遵循向下兼容。比如说.NET Framwork 4.6支持.NET Standard Library 1.3,.NET Framwork 4.6.2框架支持.NET Standard Library 1.5,而.NET Core 1.0框架支持1.6标准。
最终展望如下:
2.2 .NET Core的组成
.NET Runtime
即CoreCLR。如之前所说,CoreCLR与.NET Framework的CLR并没有什么区别,进程管理,GC,JIT(RyuJIT 编译器)这些部分也都是一样的,只是针对服务器系统做了相应优化。现在CLR和CoreCLR也在进行同步更新,只是可以肯定的是,CoreCLR才是.NET的未来,CLR将作为兼容手段而存在Framework Libraries,
即CoreFX。包括集合类,文件系统处理类,XML处理类,异步Task类等SDK Tools 和 Language Compilers (SDK工具和编译器)
即CLI工具和Roslyn编译器。可以通过.NET Core SDK(.NET Core开发工具包)获取。dotnet’app host
用来选取并执行对应运行时,提供组件载入原则和启动.NET Core应用程序。SDK也是通过相同程序启动。Tips:是不是想起了MSCorEE.dll这个垫片,它同样承载着Windows平台上为.NET应用程序选择CLR版本的工作
2.3 .NET Core的特性
跨平台
可以在Windows,macOS,Linux上运行灵活的部署机制
1.Portable applications(便携式应用)
这种部署机制和传统的.NET Framework相似,只要目标平台上存在.NET Core Runtime即可。2.Self-contained application(自宿主应用)
顾名思义,这种部署机制将应用和运行时共同打包,即便目标平台上没有安装.NET Core Runtime也能正常使用第二种方式和.NET Native也是不一样的,仍然使用CoreCLR,而.NET Native使用CoreRT作为运行时,详细信息请见dotnet/corert
命令行工具
.NET程序所有的运行脚本都可以用命令行工具执行(cmd,bash)这里有几个常见的donnet命令
指令 | 帮助 |
---|---|
dotnet new | 产生新的基本 .NET 项目内容 (包含 project.json、Program.cs 以及 NuGet.config |
dotnet restore | 还原所参考的 NuGet 包 |
dotnet build | 建造 .NET 项目 |
dotnet publish | 产生可发行的 .NET 项目 (包含所属的 Runtime) |
dotnet run | 编译与立即运行 .NET 项目 (较适用于 exe 型项目) |
dotnet repl | 引导交互式的对话 |
dotnet pack | 将项目的产出封装成 NuGet 包 |
兼容性
通过.NET Standard Library与.NET Framework,Xamarin,Mono兼容开源
.NET Core从属于.NET基金会,由微软进行官方支持。使用MIT和Apache 2开源协议,文档协议遵循CC-BY
2.4 开发语言
.NET Core 1.0版本中支持的编程语言仅有C#(F#和VB暂未实现),这里还要提到一个开源的语言编译器Roslyn,它负责将代码编译成我们熟悉的IL语言,然后再借由AOT或JIT编译器编译成机器熟悉的机器语言。
3. Get Started
以下内容演示在Windows10和CentOS 7.2下的命令行生成和发布demo
3.1 Win 10
3.1.1 安装.NET Core SDK和.NET Core Runtime
.NET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI 工具
3.1.2 简单的运行结果
打开cmd,依次输入mkdir .project
(创建目录),cd .\.project
(进入目录),dotnet new
(新建初始项目),dotnet restore
(还原依赖),dotnet run
(运行)即可运行第一个Hello World程序
3.2 CentOS 7.2(本地Hyper-V)
3.2.1 安装和运行
详情请见:.NET Core in CentOS,大致命令如下
sudo yum install libunwind libicu #安装libunwind,libicu包curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131 #下载dotnet-dev-centos-x64.1.0.0-preview2-003121.tar文件,有时会因为网络问题下载较慢,耐心等待即可,当然也可以手动下载后放到目录下。 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet #创建目录并解压已下载文件 sudo ln -s /opt/dotnet/dotnet /usr/local/bin #将目录链接到$PATH下,否则dotnet命令无法识别 mkdir hwapp cd hwapp dotnet new #创建默认.NET Core应用 dotnet restore #还原依赖包 dotnet run #运行,结果将显示Hello World!
第六行命令后可使用dotnet --info查看是否链接成功,显示如下
.NET Command Line Tools (1.0.0-preview2-003121) Product Information: Version: 1.0.0-preview2-003121 Commit SHA-1 hash: 1e9d529bc5 Runtime Environment: OS Name: centos OS Version: 7 OS Platform: Linux RID: centos.7-x64
以上步骤在.NET Core官方网站都可以找到,可以看到应用在经过简单的dotnet new
, dotnet restore
, dotnet run
命令后就跑起来了,但是这其实是类似于开发环境中的调试运行,而且win上new的应用此时也不能直接跨平台到Linux下运行,所以我们又得提到dotnet publish
命令了
3.2.2 Self-contained applications 发布
(1) 修改project.json文件
我们现在win10下按照步骤new一个新的HW控制台应用self
,按照官方文档要求,我们需要用以下内容替换原来project.json文件(删除"type": "platform",并增加runtimes节点)
{"version": "1.0.0-*","buildOptions": {"debugType": "portable", "emitEntryPoint": true }, "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0" } }, "imports": "dnxcore50" } }, "runtimes":{ "win10-x64":{}, #win10平台 "centos.7-x64":{} #centos7.2平台 } }
(2) 执行restore和publish操作
之后执行dotnet restore
指令,针对平台进行还原操作。该步操作耗时较久,虽然只是两个平台,第一次也花了较长时间。紧接着进行进行dotnet publish -r centos.7-x64 -c release
。
dotnet publish
指令详见dotnet-publish - Packs the application and all of its dependencies into a folder getting it ready for publishing
(3) 在Linux平台上运行
上述操作后,我们只需要将发布后的文件夹(bin/release/netcoreapp1.0/centos7-x64/publish,包含self.exe)上传到Linux root目录下project(新建)文件夹中, 在Shell中输入指令
修改可执行权限后,即可成功运行“Hello World”,这就是我们“Self-contained applications”方式的部署方法
4. 总结
4.1 尾声
至此,.NET Core的学习便告一段落了,以上内容简单介绍了.NET Core的组成和特性,同时也在Windows和Linux系统上通过两种不同的部署方式成功运行了示例。相比较之前的.NET Framework傻瓜式部署,.NET Core的新奇真是让我眼前一亮。接下来,我也会将.NET Core和ASP.NET Core的学习记录下来,欢迎指正。
4.2 相关学习资料
- 张善友的博客
- .NET Core Documentation
- ASP.NET Core Documentation #园子里已经有部分中文版
- 汤姆大叔的博客:解读ASP.NET 5 & MVC6系列
- .NET Blog #非常有用的.NET官方资讯
- 未完待续
5. 参考资料
- 简析.NET Core 以及与 .NET Framework的关系
- .NET Core SDK Overview
- .NET Core 1.0 is now released!
- .NET Core
- 拥抱.NET Core
- .NET Core 维基百科
- 让我们Core在一起:ASP.NET Core & .NET Core
原文:https://www.cnblogs.com/Wddpct/p/5694596.html
转载于:https://www.cnblogs.com/gongap/p/9609423.html
.NET Core全面扫盲贴相关推荐
- 【转】.NET Core全面扫盲贴
转自:http://www.cnblogs.com/Wddpct/p/5694596.html 1. 前言 2. .NET Core 简介 2.1 .NET Core是什么 2.2 .NET Core ...
- EntityFramework Core 学习扫盲
0. 写在前面 1. 建立运行环境 2. 添加实体和映射数据库 1. 准备工作 2. Data Annotations 3. Fluent Api 3. 包含和排除实体类型 1. Data Annot ...
- 【职业规划和代码库设计】
主业规划:(工具集 和 代码库) 技术论坛和开源社区 学习网站 设计(素描.PS.UI) 专业英语 绩效考评与自我评价 https://www.unjs.com/fanwenwang/ziwop ...
- 新出炉的 100+ 篇技术热文,在微信热传,别错过哦
新出炉的 100+ 篇技术热文,在微信热传,别错过哦 2016/08/08 · IT技术 · 1 评论 · 微信 分享到: 12 Yii2.0打造完整电商平台 所向披靡的响应式开发 组件化开发完整An ...
- 新出炉的 100 篇技术热文,在微信热传,别错过
本文收录的文章来自 10 个热门的技术类微信公众号.我们从每个公号中选出了 2016 年 7 月最热门的 10+ 篇技术文章,共 100 篇精华. 涉及的技术包括:Python.Linux.Java. ...
- Linux扫盲篇:CentOS、Ubuntu、Gento
Linux扫盲篇:CentOS.Ubuntu.Gentoo Linux最早由Linus Benedict Torvalds在1991年开始编写.在这之前,Richard Stallman创建了Free ...
- .net core EFcore model生成数据
创建数据库 (扫盲贴还劳烦大神们勿喷,谢谢) 打开数据库 输入如下代码 创建数据库 CREATE DATABASE [Blogging]; GOUSE [Blogging]; GOCREATE TAB ...
- ENDC相关概念扫盲
文章目录 前言 两种Cell Group之间的区别和联系 两种Node之间的区别和联系 四种 cell 之间的区别和联系 两种TAG之间的区别和联系 两种PUCCH group之间的区别和联系 参考文 ...
- PCIe | 基础知识点扫盲
本文总结 lspci 相关的知识点 1' 2' 3' 4' 5' 6. 本文的内容主要源自互联网技术博客及 SSDfans 网站 7. 持续更新中 - Update: 2023 / 1 / 23 PC ...
最新文章
- 宁波网络推广介绍几点容易被优化人员忽略的图片优化技巧!
- 深入浅出理解Javascript原型概念以及继承机制(转)
- 【错误记录】Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )
- oracle撤销管理的方法,Oracle9i中利用自动撤销管理的优点
- 二维计算几何基础知识
- vs2012搭建gtest环境
- [剑指offer] 数组中只出现一次的数字
- es6 class extends
- python快速示例_Python编程入门-基本示例,快速,上,手,基础
- 数据计算 统计学案例_PSG三维数据采集软件在土方量计算中的应用案例
- 推荐系统项目实战-电影推荐系统
- 空间相关分析与SDM
- graphpad xy轴互换_GraphPad Prism的双Y轴作图
- 1.操作系统的基本特性和主要功能
- python语料库_NLPPython笔记——语料库
- 蚂蚁区块链开放联盟链发布会 | 巴比特全程支持
- H264视频通过RTMP直播 .
- 两级交流放大电路实验报告
- Kotlin学习安卓篇(一)为什么要学习Kotlin?
- 有哪些高性价比的LoRa模块?
热门文章
- svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
- java header file_javah 生成header file 报错 问题解决
- python中文显示不出来_Python查询数据库,中文的结果显示不出来
- springboot怎么返回404_自定义SpringBoot REST API 404返回信息
- matlab 离散点求导_Matlab的离散点曲线导数曲率数值模拟方法
- linux 父子进程 资源_从零开始学K8S(二):进程隔离让docker看起来像虚拟化
- python绘制曲线y=2x+5_Python Matplotlib 简易教程
- 人脸对齐(十四)--LPFA
- KNN(七)--最近邻及OpenCV源码分析
- presto自定义UDF函数