.Net Core在Centos7上初体验

本文主要内容是简单介绍如何在centos7上开发.Net Core项目,在此之前我们首先了解下.Net Core的基本特性。

1 .Net Core和.Net FrameWork的异同

1.1 .Net Core优势

  .Net Core发布两年了,这两年.Net Core的发展十分迅速,到目前已经推出来了.Net Core3.0预览版,支持通过.Net Core来开发桌面应用程序(WPF,WinForm),现在.Net平台的开发者应该不会对“.Net Core就是.Net的未来”这一说法再有质疑。我所在的公司自去年开始从.Net Framework向.Net Core迁移,现在技术已基本成型。个人觉得从.Net Framework到.Net Core平台的转换路线对我们开发人员来说十分平缓,在开发业务代码时和使用.Net Framework几乎没有什么区别。

.Net Core的特点:
跨平台: 可以在 Windows、macOS 和 Linux 上运行;
跨体系结构: 在多个体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码;
部署灵活:十分适合搭配 Docker 容器来轻松部署项目在不同的平台上;
兼容性:.NET Core 通过 .NET Standard与 .NET Framework、Xamarin 和 Mono 兼容;
开放源代码:.NET Core 平台是开放源代码,使用 MIT 和 Apache 许可证。
ASP.Net Core的优势:
轻型高性能的模块化HTTP请求管道;
内置依赖注入,(可以使用第三方替换);
能够在IIS,nginx,Apache,docker上进行托管或在自己的进程中进行托管;
云就绪配置系统;
生成mvc和webapi的统一场景,控制器不在分为Controller和ApiController,只有一个统一的Controller(请求处理管道统一)。

1.2 .Net Core和.Net Framewoke的编译过程对比

  .Net Core在Centos7上初体验

  在传统.Net Framework中,我们的代码会调用FCL中的基础类库,代码通过编译器编译成IL(中间语言),中间语言在CLR中通过JIT(just in time,即时编译器)编译成本机代码(就是CPU可处理的二进制指令),最后本机代码运行在Windows平台上。这里FCL是随着.Net Framework的版本更新而更新的,即如果我们要使用新的FCL就必须更新.Net Framework;.Net Framework的FCL中包含了所有基础类库(很多基础类库我们的项目并没有使用到)这也造成了代码冗余。

.Net Core在Centos7上初体验

  在.Net Core中CoreFX就是基础类库(相当于.Net Framework中的FCL),Linux/Windows/Macos都有自己的CoreFX,每个版本的CoreFX都实现.Net Standard中定义的标准接口。我们的代码通过Nuget按需获取CoreFX中的类库(模块化,减少引入不需要的类库),然后通过跨平台的Roslyn编译器编译成IL,IL在CoreCLR中通过RyuJIT(Ryu即时编译器)编译成操作系统对应的本机代码,然后在对应的操作系统上运行。

  我们可以看出.Net Core通过Nuget按需获取基本类库,使得项目更利于模块化管理,更轻巧。

2 Centos7开发.Net Core项目

2.1 开发前提

1.软件安装

.安装VMWare虚拟机管理软件

.安装Centos7虚拟机

.安装PuTTy或者XShell远程操作工具

PuTTy/XShell工具一直next安装即可,操作和我们使用Linux命令行一样,主要用于远程登录和操作Linux系统。

VMWare和Centos7虚拟机安装可以看看这一篇 :VMWare安装和配置

2.Net Core安装

  .Net Core的安装包有两种:runtime和SDK

.net core SDK
包含runtime、Roslyn、CoreFX、netCore CLI等,想当于javaz中的jdk,开发时使用 .net core Runtime
主要包含CoreCLR,用于运行.Net Core项目,相当于java中的jre,部署时使用

  为了在Linux上进行开发,我们选择安装SDK,下载地址:https://dotnet.microsoft.com/download,我们也可以在线安装两行代码就可以搞定

//1.安装.NET sdk前,首先注册,并安装一些必要的依赖项。一台设备只需要执行一次
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
//2.安装SDK
sudo yum install dotnet-sdk-2.2
//3.验证是否成功,用于查看版本号
dotnet --version

2.2 Centos上开发Console应用程序

  我们使用CLI工具在centos上开发Console应用程序,开发过程如下图,几行简单的代码就可以完成一个Console项目的开发,并在Centos上运行成功。

.Net Core在Centos7上初体验

2.3 Centos上开发MVC应用程序

  开发mvc项目和控制台项目的过程基本一致,按下图中的命令即可新建一个mvc项目并运行成功。

.Net Core在Centos7上初体验

  我们看到运行成功后只能在本机*问,那么如果我们想让我们的电脑访问虚拟机上的mvc网站怎么办呢?很简单,修改下mvc项目的配置即可

.Net Core在Centos7上初体验

  然后切换到mvc根目录,执行 dotnet run ,运行结果如下:

.Net Core在Centos7上初体验

  在我们的笔记本电脑上打开浏览器,输入url(虚拟机Ip:5000),访问结果如下:

.Net Core在Centos7上初体验

2.4 Centos上开发Web API应用程序

  .Net Core中Mvc和WebApi采用的是同一的http处理管道,控制器都继承于统一的Controller(没有了ApiController)所以开发WebApi项目和开发mvc项目的过程基本一样,如下:

.Net Core在Centos7上初体验

  我们看到运行后的url为http://localhost:5000,webapi应用只能在本机访问,如果要让其他设备可以访问,那么需要修改配置文件,和mvc中修改的方式一样。修改完成后,再次通过 dotnet run 命令启动项目,我们就可以在其他设备*问centos上部署的WebApi项目了。如下
.Net Core在Centos7上初体验

3.小结

  这里简单介绍了.Net Core的一些特性,并在Centos7虚拟机上使用CLI工具开发Console、MVC、WebAPI应用。在Centos等Linux系统上,我们可以使用vim编辑器进行代码编写,但是这种方式很不方便。实际开发中我们会使用VS或者VsCode工具进行开发,然后将发布版本部署在Linux系统上。

上一篇:WPF中DataGrid在没有数据的时候也可以显示水平滚动条


下一篇:谈一谈struts2和springmvc的拦截器