当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET Core全面扫盲贴

ASP.NET Core全面扫盲贴

2017年12月08日  | 移动技术网IT编程  | 我要评论

常吃一物能清肺中10余年毒,武汉十七中教师门,全职家丁txt

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

详情请见: ,大致命令如下

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网