转自:http://www.cnblogs.com/Wddpct/p/5694596.html


  • 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/-sylar/p/8377640.html

【转】.NET Core全面扫盲贴相关推荐

  1. .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 ...

  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. Leetcode 127. 单词接龙 解题思路及C++实现
  2. 一个很简短的 JS 生成器入门和用法参考
  3. 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息
  4. 两种方式调试JNI中DLL(动态链接库)
  5. XML文件操作(C#)
  6. Ajax — 大事件项目(第三天)
  7. oracle的em能干什么,转载 解决Oracle的EM登录
  8. 159个故事串起三千年大历史!这套“儿童版史记”太无敌了!
  9. Linux入门笔记——echo
  10. centos 8 kubernetes安装详解_电力工程必学!8方面施工图文详解,电气安装工程施工工艺...
  11. 三维地理信息系统空间的可视化分析
  12. cell和battery的区别
  13. SAP WEB IDE local 安装
  14. [每日一题]C语言:将输入的一句话的单词倒置,但标点符号不倒置
  15. MyEclipse2019 4破解
  16. 常用CASE工具介绍 (csnd.net)
  17. Android Preference详解
  18. 服务器共享文件搜索慢的原因,客户端访问服务器共享文件反应很慢.doc
  19. 基于imx8的成熟360全景方案 ,NVP6324+IMX8,N4+IMX8
  20. 《嵌入式 - Lwip开发指南》第5章 LWIP测速

热门文章

  1. CSS 选择器 :last-child与:last-of-type的区别
  2. JSON在JS和JAVA的处理
  3. OpenCV 玩九宫格数独(二):knn 数字识别
  4. python中有关数据持久存储:pickle模块的基本使用
  5. 算法基础:最大递减数问题(Golang实现)
  6. 如何在内核里面查找某些结构体或者宏的定义
  7. Linux 三剑客之SED行天下
  8. 概述 Linux系统扫描技术及安全防范
  9. 我眼中的计算机,我眼中的计算机-计算机开机背后的故事
  10. mysql用sql语句怎么做个脚本备份_mysql备份脚本