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

在.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上运行成功。

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

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

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

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

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

我们看到运行后的url为http://localhost:5000,webapi应用只能在本机访问,如果要让其他设备可以访问,那么需要修改配置文件,和mvc中修改的方式一样。修改完成后,再次通过 dotnet run 命令启动项目,我们就可以在其他设备上访问centos上部署的WebApi项目了。如下
3.小结
这里简单介绍了.Net Core的一些特性,并在Centos7虚拟机上使用CLI工具开发Console、MVC、WebAPI应用。在Centos等Linux系统上,我们可以使用vim编辑器进行代码编写,但是这种方式很不方便。实际开发中我们会使用VS或者VsCode工具进行开发,然后将发布版本部署在Linux系统上。
.Net Core在Centos7上初体验的更多相关文章
- 在openwrt上初体验PostgreSQL数据库
要求 请确保在你的路由器shell 中有以下这些命令 adduser, deluser, addgroup, delgroup, su . 还需要熟悉su,chown ,opkg,mkdir,服务操作 ...
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- Consul在.Net Core中初体验
Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很多组件,包括服务发现配置共享键值对存储等 本文主 ...
- .NET Core 初体验
.NET Core 作为微软的开源项目,neter 们对之的期待还是挺大的. 以前也看过,接触过,摸索建了几个示例项目,今天就罗列下自己的初体验. .NET Core 安装.帮助等 安装的话,直接官网 ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- .net core安装及初体验
.net core安装及初体验 .net core 作为微软的新一代技术,在开发跨平台.微服务等方面有很大的优势,也更贴近现代的编码习惯.在2.0版发布很久以后,近期终于决定进行学习和体验. 安装 作 ...
- CentOS7上部署ASP.Net Core 2.2应用
前言 在CentOS7上部署ASP.Net Core应用是我的技术路线验证的一部分,下一个产品计划采用ASP.Net Boilerplate Framework开发.因此需要求提前进行一下技术验证,在 ...
随机推荐
- typescript的函数
1:默认参数(传入值会覆盖默认参数,不传值也行) function getinfo(name:string,age:number=20):string{ return `${name}---${age ...
- Android破解学习之路(十四)——【Unity3D】王牌大作战破解
一.前言 今天带来的是王牌大作战的破解教程,游戏下载的话,我是直接去TapTap官网下载的 支付宝内购破解用老套了,今天学点破解的新花样吧!! 二.支付宝内购破解 支付宝的内购破解已经很熟悉了, 直接 ...
- 智能ERP收银统计-优惠统计计算规则
1.报表统计->收银统计->优惠统计规则 第三方平台优惠:(堂食订单:支付宝口碑券优惠)+(外卖订单:商家承担优惠) 自平台优惠:(堂食订单:商家后台优 ...
- C#图片添加文字水印
/// <summary> /// 给图片添加文字水印 /// </summary> /// <param name="img">图片</ ...
- Python 之Web编程
一 .HTML是什么? htyper text markup language 即超文本标记语言 超文本:就是指页面内可以包含图片.链接.甚至音乐.程序等非文字元素 标记语言:标记(标签)构成的语言 ...
- golang 使用匿名结构体的问题
golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...
- Docker:pipeline编写基本技巧- jenkins配置通过免交互方式拉取git源码管理仓库的代码
工作中,从git仓库拉取代码有2种方式:交互式和非交互式 什么是交互式?就是拉取需要权限才能访问的代码时,需要输入密码 免交互式呢? 是通过密钥,私钥的方式,让服务端信任客户端,产生信任后,任何一次客 ...
- bzoj4892 [TJOI2017]DNA
bzoj4892 [TJOI2017]DNA 给定一个匹配串和一个模式串,求模式串有多少个连续子串能够修改不超过 \(3\) 个字符变成匹配串 \(len\leq10^5\) hash 枚举子串左端点 ...
- PHP字符串函数、常量、数组排序
PHP字符串函数.常量.数组排序 strlen() 说明:strlen(),可以统计字符串长度 用途:strlen() 常用于循环和其他函数,在确定字符串何时结束很重要时.(例如,在循环中,我们也许需 ...
- Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: java.sql.SQLExcepti ...