.NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。
只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NETCore出现了,它让开发者们在官方和社区的支持走出了Windows,可以在macOS,Linux主流distributions上编写调试并部署.NET程序。
吐槽:只能感谢微软《CLRviaC#》不用白看呀,我之前看了得有小半年才看完
dotnet’apphost用来选取并执行对应运行时,提供组件载入原则和启动.NETCore应用程序。SDK也是通过相同程序启动。
Tips:是不是想起了MSCorEE.dll这个垫片,它同样承载着Windows平台上为.NET应用程序选择CLR版本的工作
跨平台可以在Windows,macOS,Linux上运行
灵活的部署机制
1.Portableapplications(便携式应用)这种部署机制和传统的.NETFramework相似,只要目标平台上存在.NETCoreRuntime即可。
2.Self-containedapplication(自宿主应用)顾名思义,这种部署机制将应用和运行时共同打包,即便目标平台上没有安装.NETCoreRuntime也能正常使用
命令行工具.NET程序所有的运行脚本都可以用命令行工具执行(cmd,bash)这里有几个常见的donnet命令
.NETCore1.0版本中支持的编程语言仅有C#(F#和VB暂未实现),这里还要提到一个开源的语言编译器Roslyn,它负责将代码编译成我们熟悉的IL语言,然后再借由AOT或JIT编译器编译成机器熟悉的机器语言。
以下内容演示在Windows10和CentOS7.2下的命令行生成和发布demo
.NETCoreSDK=使用.NETCore开发应用.NETCoreRuntime和SDK+CLI工具
打开cmd,依次输入mkdir.project(创建目录),cd.\.project(进入目录),dotnetnew(新建初始项目),dotnetrestore(还原依赖),dotnetrun(运行)即可运行第一个HelloWorld程序
第六行命令后可使用dotnet--info查看是否链接成功,显示如下
(1)修改project.json文件
(2)执行restore和publish操作
(3)在Linux平台上运行
上述操作后,我们只需要将发布后的文件夹(bin/release/netcoreapp1.0/centos7-x64/publish,包含self.exe)上传到Linuxroot目录下project(新建)文件夹中,在Shell中输入指令
修改可执行权限后,即可成功运行“HelloWorld”,这就是我们“Self-containedapplications”方式的部署方法