• 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平台上运行
  • 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 newdotnet restoredotnet 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全面扫盲贴相关推荐

  1. 【转】.NET Core全面扫盲贴

    转自:http://www.cnblogs.com/Wddpct/p/5694596.html 1. 前言 2. .NET Core 简介 2.1 .NET Core是什么 2.2 .NET Core ...

  2. EntityFramework Core 学习扫盲

    0. 写在前面 1. 建立运行环境 2. 添加实体和映射数据库 1. 准备工作 2. Data Annotations 3. Fluent Api 3. 包含和排除实体类型 1. Data Annot ...

  3. 【职业规划和代码库设计】

      主业规划:(工具集 和 代码库) 技术论坛和开源社区 学习网站 设计(素描.PS.UI) 专业英语 绩效考评与自我评价  https://www.unjs.com/fanwenwang/ziwop ...

  4. 新出炉的 100+ 篇技术热文,在微信热传,别错过哦

    新出炉的 100+ 篇技术热文,在微信热传,别错过哦 2016/08/08 · IT技术 · 1 评论 · 微信 分享到: 12 Yii2.0打造完整电商平台 所向披靡的响应式开发 组件化开发完整An ...

  5. 新出炉的 100 篇技术热文,在微信热传,别错过

    本文收录的文章来自 10 个热门的技术类微信公众号.我们从每个公号中选出了 2016 年 7 月最热门的 10+ 篇技术文章,共 100 篇精华. 涉及的技术包括:Python.Linux.Java. ...

  6. Linux扫盲篇:CentOS、Ubuntu、Gento

    Linux扫盲篇:CentOS.Ubuntu.Gentoo Linux最早由Linus Benedict Torvalds在1991年开始编写.在这之前,Richard Stallman创建了Free ...

  7. .net core EFcore model生成数据

    创建数据库 (扫盲贴还劳烦大神们勿喷,谢谢) 打开数据库 输入如下代码 创建数据库 CREATE DATABASE [Blogging]; GOUSE [Blogging]; GOCREATE TAB ...

  8. ENDC相关概念扫盲

    文章目录 前言 两种Cell Group之间的区别和联系 两种Node之间的区别和联系 四种 cell 之间的区别和联系 两种TAG之间的区别和联系 两种PUCCH group之间的区别和联系 参考文 ...

  9. PCIe | 基础知识点扫盲

    本文总结 lspci 相关的知识点 1' 2' 3' 4' 5' 6. 本文的内容主要源自互联网技术博客及 SSDfans 网站 7. 持续更新中 - Update: 2023 / 1 / 23 PC ...

最新文章

  1. 宁波网络推广介绍几点容易被优化人员忽略的图片优化技巧!
  2. 深入浅出理解Javascript原型概念以及继承机制(转)
  3. 【错误记录】Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )
  4. oracle撤销管理的方法,Oracle9i中利用自动撤销管理的优点
  5. 二维计算几何基础知识
  6. vs2012搭建gtest环境
  7. [剑指offer] 数组中只出现一次的数字
  8. es6 class extends
  9. python快速示例_Python编程入门-基本示例,快速,上,手,基础
  10. 数据计算 统计学案例_PSG三维数据采集软件在土方量计算中的应用案例
  11. 推荐系统项目实战-电影推荐系统
  12. 空间相关分析与SDM
  13. graphpad xy轴互换_GraphPad Prism的双Y轴作图
  14. 1.操作系统的基本特性和主要功能
  15. python语料库_NLPPython笔记——语料库
  16. 蚂蚁区块链开放联盟链发布会 | 巴比特全程支持
  17. H264视频通过RTMP直播 .
  18. 两级交流放大电路实验报告
  19. Kotlin学习安卓篇(一)为什么要学习Kotlin?
  20. 有哪些高性价比的LoRa模块?

热门文章

  1. svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...
  2. java header file_javah 生成header file 报错 问题解决
  3. python中文显示不出来_Python查询数据库,中文的结果显示不出来
  4. springboot怎么返回404_自定义SpringBoot REST API 404返回信息
  5. matlab 离散点求导_Matlab的离散点曲线导数曲率数值模拟方法
  6. linux 父子进程 资源_从零开始学K8S(二):进程隔离让docker看起来像虚拟化
  7. python绘制曲线y=2x+5_Python Matplotlib 简易教程
  8. 人脸对齐(十四)--LPFA
  9. KNN(七)--最近邻及OpenCV源码分析
  10. presto自定义UDF函数