ASP.NET Core全面扫盲贴

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 安装和运行

详情请见: https://www.microsoft.com/net/core#windowsvs2015,大致命令如下

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的学习记录下来,欢迎指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • win10下ASP.NET Core部署环境搭建步骤

    随着ASP.NET Core 1.0 rtm的发布,网上有许多相关.net core 相关文章,今刚好有时间也在win10环境上搭建下 ASP.NET Core的部署环境,把过程记录下给大家. 1. 开发运行环境 1> Visual Studio 2015 Update 3* 2> .NET Core 1.0 for Visual Studio (包括asp.net core 模板,其中如果机器上没有.net core sdk会默认安装)地址https://go.microsoft.com/f

  • Amazing ASP.NET Core 2.0

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着功能已经基本确定,还没有学习过 ASP.NET Core 的同学可以直接从 2.0 开始学起,但是如果你已经掌握了 1.0 的话,那么你只需要了解在 2.0 中增加和修改的一些功能即可. 每一次大版本的发布和升级,总会带给开发人员一些惊喜和令人兴奋的特性,有关 ASP.NET Core 本次的 2.

  • Visual Studio 2017 ASP.NET Core开发

    Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行ASP.NET Core开发. 新的ASP.NET Core项目为csproj ,打开之前的xproj项目,会提示单向升级,确认以后,会自动帮你升级至csproj. 新建项目 VS 2017新建ASP.NET Core 项目: 确定以后 可选择ASP.NET Core 1.0 和ASP.NET Co

  • ASP.NET Core程序发布到Linux生产环境详解

    在这篇文章里我们将介绍如何在 Ubuntu 14.04 Server上部署ASP.NET Core应用程序.我们将把ASP.NET Core应用程序放到一个反向代理服务器的后面,由代理服务器把请求转交给我们的Kestrel服务器.除此之外,我们还将保证我们的web应用程序作为一个守护进程来进行启动.我们需要配置一个进程管理工具来帮助我们在程序崩溃时恢复程序,以保证高可用性. 章节: 准备 复制你的应用程序 配置一个反向代理服务器 监控我们的应用程序 启动我们的应用程序 观察日志 使我们的应用程序

  • ASP.NET Core应用中与第三方IoC/DI框架的整合

    一.ConfigureServices方法返回的ServiceProvider没有用! 我们可以通过一个简单的实例来说明这个问题.我们先定义了如下这个一个MyServiceProvider,它实际上是对另一个ServiceProvider的封装.简单起见,我们利用一个字典来保存服务接口与实现类型的映射关系,这个关系可以通过调用Registe方法来注册.在提供服务实例的GetService方法中,如果提供的服务类型已经被注册,我们会创建并返回对应的实例对象,否则我们将利用封装的这个ServiceP

  • 详解Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 目录 新建一个 WebApp 项目 发布到 Linux,Mac OS 使用 Nginx 进行反向代理 新建一个 WebApp 项目 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序. 以下是我在 Mac 中的截图: 主要是用以下几个命令: mkdir He

  • 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ASP.NET Nginx 发布和部署 :http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html. Asp.Net Jexus 发布和部署:http://www.cnblogs.com/savorboard/p/dot-n

  • ASP.NET Core优雅的在开发环境保存机密(User Secrets)

    前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,在以前我们会把他保存到web.config中,但是在ASP.NET Core中,这一方式或许发生了改变,或者说你有更多多元化的方法, 以及更加优雅的的配置来设置或者保存这些机密资料. 起初我以为这个UserSecrets它并没有什么用,因为我有需要配置的地方我直接配置到appsetting.json文件中就可以了,直到一次开发过程中,我才感受到了它真正

  • Visual Studio ASP.NET Core MVC入门教程第一篇

    ASP.NET Core MVC入门教程第一节课,具体内容如下 1.开始环境 visual studio 2017 社区版或其他版本.安装时勾选"Web和云"组中的"ASP.NET及网页开发"项和"其他工具"组中的".NET Core平台开发"项. 2.创建一个网页应用 (1)在 Visual Studio中, select 文件 >新建 >项目. (2) 在"新项目"对话框中的左面板中,点击&

  • Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Net Web运行在Linux上还是有点小激动(只可惜微软走这一步路走的太晚,要不然屌丝们也不会每每遇见Java VS .Net就想辩论个你死我活). 开发环境和部署环境 Windows 10.VS2015 Update3.安装.Net Core SDK.DotNetCore.1.0.1-VS2015T

随机推荐