Blog.Core 项目已完成升级.NET5.0

(是时候拿出来这种图了)
本文首发于公众号,但是会有新的内容加进来,所以就在博客园新开了一篇,望见谅。截止发稿,Blog.Core项目Master分支已经迁移到了5.0,新建了3.1的分支。

开心的锣鼓
想必这两天最热闹的几个词语,就是c#9.0、.net5.0还有conf大会了吧,当然还有大一统。
其实,早在2019年年中,就已经引入了.NET5.0了,然后从2020-03-16开始,就一直在说.NET5.0的正向积极迭代发布过程,前前后后经历了8个预览版,2个最终测试版,终于在2020-11-10发布了v5.0.0版本。
当然,我也是二话不多说,直接开始升级更新,我先用我的Blog.Core项目测试,大家也可以先用我的这个项目试试,如果没啥问题,可以放心的升级自己的线上产品,当然,我还是是建议升级的,很多公司都直接把测试版上了生产环境了,比如:cnblogs.com,dot.net,bing.com什么的,稳定性是靠的住的,特别是在性能提升和降低web应用托管成本上有很好的表现,当然如果你已经会了netcore3.x,不用担心升级带来的压力,因为没有压力。具体内容,可以查看官方PM的官宣文档:
https://devblogs.microsoft.com/dotnet/announcing-net-5-0
同时可以查看下升级方案:
有哪些改进
首先就是性能,许多组件的性能都已经得到了很大的提高,比如Arm64性能和gRPC。
然后就是新语言的改进,C#9和F#5提供了新的语言改进,比如顶级程序,比如逻辑和属性模式匹配,比如Record记录,比如可空注释,当然还有Windows的窗体设计器。
还有一些其他的,比如Json序列化,正则,HTTP性能,垃圾回收。
还有ClickOnce客户端发布,单文件应用程序,缩小容器镜像大小等等。
当然,我这里也就是泛泛而谈,网上已经充满了各种资料,想必都已经看过了,我就不赘述了。
3关于命名的问题
这个已经不是一个同学问我了,为啥叫.NET5.0,这里是两部分,第一个就是.NET,这个是很好理解的,毕竟是大一统嘛。
.NET 5 = .NET Core vNext,
简单点说呢,就是在Core的基础上,把Framework的大部分Api给融入了进去,这样就是统一了。
然后就是5.0了,这里有个图,你一看就知道啥意思了:
就是要和.NETFramework做区分,所以取名为5的版本,是这个意思。
好啦,基本的的介绍呢,如果要铺开了来讲,三篇都不够,所以关于性能的调试等数据,以后会出报告,我们先怀着激动的心直接升级项目吧,更多的文档以后同步更新。

1、更新开发环境
其实我们都是从2.0一路升级过来的,各种套路已经轻车熟路了,还是老规矩,升级VS就行了。
1、升级VS
如果你是用的VSCode的话,C#插件已经支持了.NET5和C#9,更新即可:
https://code.visualstudio.com/docs/languages/dotnet
如果是VS2019的话,直接升级到16.8版本即可,官方已经正式发布了,首先更新安装程序。
(更新VS Installer)
我这里是目前知识安装了web开发相关的功能组件
(安装核心功能组件)
我们切换顶部栏目,可以看到第一个就是.NET5的运行时:
(支持的运行时)
当然,如果你要开发移动端和桌面应用程序,这四个也需要勾选了
(其他功能组件)
接下来就是等待安装成功了
(vs成功安装至16.8.0)
到这里就完成了升级开发环境的过程,当然,如果不放心,可以查看下:
(SDK成功安装至5.0)
2、更新项目
这个就更简单了,自从netcore3.0稳定了以后,无论是升级到LTS的3.1,还是.NET5.0,都是特别简单,直接修改项目文件.csproj就行:
(更新csproj文件)
当然,你也可以右键,更新属性
(更新项目属性)
就这样,我们把每一层都更新到.NET5.0后,然后同时也把引用的nuget也都升级到最新,就ok了,这个不赘述,简单升级就行。
最后,清理解决方案,然后重新编译下,可以看到,0 fail,0 error,就是这么丝滑!
(项目全部编译通过)
启动运行项目,就可以看到效果了
(项目升级完成)
3、新建项目
刚刚演示的是更新一个我们之前的项目的,那如何新建项目,会不会有变化呢,可以看看。
首先,选择SDK的时候,还是带了core,这个应该是做统一吧
(新建.NET5.0项目)
虽然这里还是带了Core,但是无碍。
除此之外,可以看到,如果新建API项目,右侧多了一个OpenAPI的支持,勾选框可以看到,其实是我们经常使用的Swagger,可见官方也默认了这种方式。
进到项目里,也看到了和3.1是一样的,只不过官方承诺的参数提示终于完整的加上了,VS2019预览版做的不是很好,目前这个已经很OK了。
(VS参数提示)
那本地开发咱们说完了,服务器怎么来操作下呢,没有任何麻烦,十分简单,我下边会说两个情景,一个是直接Linux服务器+Docker托管运行的,一种是基于Jenkins下使用Docker托管的。
如果你是用pm2之类的组件托管的,那只需要直接在Linux服务器上安装5.0就行,无论是运行时还是SDK,我直接安装的SDK,我用的是CentOS:
sudo yum update or refreshsudo yum install dotnet-sdk-5.0
注意下,如果你的是全新的服务器,一定要先安装微软的一些配置和依赖:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
现在环境好了,可以用命令行试试,是否可以运行我们的项目:
(第一次发布,会有欢迎提示)
然后运行下发布后的文件:
dotnet xxxx.dll
很好,没问题,那接下来就需要用docker构建镜像了。
构建docker镜像
这里有个小小的插曲,要注意一下,如果你的项目之前已经用了dockerfile,并且是微软的官方源镜像,那需要修改下地址,之前的版本是这样的:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS baseWORKDIR /appEXPOSE 80
如果你直接修改3.1为5.0,那用这个Dockerfile构建镜像是找不到源镜像的,新版的是这样的:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS baseWORKDIR /appEXPOSE 80
没错,你一定看出来了,少了一个core的路径,从这个小地方,就可以看得出来,微软官方的想法是怎样的。
好啦,那没有什么了,直接提交到服务器,构建镜像吧:
完成。
3、Docker+Jenkins
如果你是一直跟着我的教程走的,肯定知道前段时间我搞了一个基于docker容器版本的Jenkins,来快速实现CI/CD,目前一切良好。
而且你肯定也知道我是自建了一个Jenkins的镜像,因为我在里边添加了DotNetCore和NPM的依赖组件,那之前是3.1的SDK,现在我又升级了下,添加了.NET5.0的SDK:
(自建Jenkins镜像,core版本)
如果你想看具体的构建内容和过程,可以看这篇文章《升级Jenkins:发布和代理 VUE 项目》,如果想使用呢,直接pull下来就行了:
docker pull laozhangisphi/jenkins_with_dnt-cnpm_by_docker:latest
然后就可以删掉之前的容器,再生成一个新的容器就行了,如果你之前的数据都挂载在宿主机上了,就不用担心丢失的问题:
docker run -u root --rm -d -p 3000:8080 --name jenkins \-v /etc/localtime:/etc/localtime \-v /usr/bin/docker:/usr/bin/docker \-v /var/run/docker.sock:/var/run/docker.sock \-v /home/dockerVolumes2/jenkins_home:/var/jenkins_home \laozhangisphi/jenkins_with_dnt-cnpm_by_docker
当然,如果你不放心,可以先不删掉之前的容器,可以run一个新的容器和端口,看看效果。这里有个小问题就行,如果你之前pull过我的镜像,再pull的话,会有两个,用最新的就行。
然后在Jenkins中编辑构建:
(Jenkins构建命令)
因为我用的是先发布再构建的方式,所以这么写,你可以直接Dockerfile中编译发布构建一体,这个就是基础知识了,你肯定看的懂。
构建完成,很简单,2分钟搞定。
(jenkins构建任务记录)
目前项目已经完全更新完成,没任何问题,当然,可能因为组件或者ORM的问题,出现些小问题,都是小事儿,和.NET5.0没啥关系,完美。
全部时间:2个小时。
参考链接:
https://devblogs.microsoft.com/dotnet/
https://devblogs.microsoft.com/dotnet/announcing-net-5-0
基于Net/Core,快速搭建 API & SPA 及微服务应用组织
BASE NETCORE (VUE) PROJECT TEAM
每一个.NET开发者都可以通过自己的开源项目(最好可以配套简单发表些文章)在这里进行分享,BCVP开发者组织的意义就是激发和挖掘更多的作品,可能偏基础,但是都会有价值。目的就是希望:每个人能将从社区学到的知识,进行自己消化和总结,浓缩成一个个独立的项目,接着投入到社区,最后让更多的初学者去了解、去学习、去思想碰撞,从而达到学习来源于社区,最后反哺于社区的良好循环目的,我们都是学生,也都是下一批初学者的老师,这才应该是一个社区正向推动的方法。
地址:https://github.com/BaseCoreVueProject
可以在Home仓库里,查看具体的流程说明。

?WT.mc_id=DOP-MVP-5003704
Blog.Core 项目已完成升级.NET5.0的更多相关文章
- WPF 从 .net core 3.1到 .net 5.0
WPF 从 .net core 3.1 到 .net 5.0 Intro 昨天更新了一个简单的 asp.net core webapi 项目,从 3.1 更新到了 5.0,今天更新一个 WPF 应用到 ...
- 使用JMeter测试.Net5.0,.Net6.0框架下无数据处理的并发情况
1. 安装JMeter及使用 1.1下载JMeter 登录官方网站找到下载链接进行下载:https://jmeter.apache.org/download_jmeter.cgi 1.2配置环境变 ...
- 从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书
宫 哈喽大家好,国庆马上就要来了,在新的第四季度来临之际,祝大家年末能顺顺利利,解决所有的难题.大家可能从我的标题里也能看的出来,老张又要耍花样,搞事情了,近来随着 netcore 3.0 的正式推出 ...
- dotnet core项目升级到 .net core 2.0
这几天无疑我们已经让.net core 2.0正式版发布的消息刷屏,这次发布整整提前了一个月的时间,关于具体的发布信息,可以去看善友大神的博客,.NET Core 2.0 正式发布信息汇总,废话不多说 ...
- 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二
一张图搞定OAuth2.0 目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...
- 将 Net 项目升级 Core项目经验:(一)迁移Net项目为Net Core\Standard项目
迁移Net项目为Net Core\Standard项目 背景: 我们公司内部有自己ORM开发框架,最新因为需要将系统迁移到国产服务器上,所以首先需要将最基础的ORM框架改造可以运行在国产服务器上.对于 ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Net Core 项目实战之权限管理系统(0)
0 前言 Net Core 项目实战之权限管理系统(0) 无中生有 0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...
- 将 Net 项目升级 Core项目经验:(二)修复迁移后Net Standard项目中的错误
修复迁移后Net Standard项目中的错误 接上一章,项目编译结果如下: 解决依赖dll引用 在Net Framework项目的引用如下: 各引用和作用: log4net(1.10.0.0) 用于 ...
随机推荐
- 小白安装使用Redis
Redis属于NoSql中的键值数据库,非常适合海量数据读写. 之前用过mongo但是没有用过redis,今天来学习安装redis. 先去官网下载redis安装包 redis官网 redis是c语言编 ...
- cmd备份数据库,还原数据库,仅限于php
第一:先备份数据库 1.进入cmd(黑盒子) 2.进入phpstudy所在的盘 3.cd E: 3.cd phpstudy; 4.cd PHPTutorial 5.cd mysql; 6.cd bin ...
- Python+Appium自动化测试(2)-appium连接真机启动app
app自动化测试的第一步,是启动被测app.appium环境搭建好后,我们就可以连接真机启动app了.环境为windows,Appium1.18.0,Android手机,被测app为今日头条app,让 ...
- 异步编程新方式async/await
一.前言 实际上对async/await并不是很陌生,早在阮大大的ES6教程里面就接触到了,但是一直处于理解并不熟练使用的状态,于是决定重新学习并且总结一下,写了这篇博文.如果文中有错误的地方还请各位 ...
- Redis的介绍以及安装
redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件 高速缓存介绍 高速缓存利用内存保存数据,读写速度远超硬盘 高速缓存可以减少 I/O 操作,降 ...
- 【C语言C++编程学习笔记】一种很酷的 C 语言技巧,灵活运用编程技巧让你写代码事半功倍!
C语言常常让人觉得它所能表达的东西非常有限.它不具有类似第一级函数和模式匹配这样的高级功能.但是C非常简单,并且仍然有一些非常有用的语法技巧和功能,只是没有多少人知道罢了. ☆ 指定的初始化 很多人都 ...
- 【水】怎么在 HZOI 上水到更高的分
前言 这些东西在联赛并用不了 预编译优化 40行优化 #define _CRT_SECURE_NO_WARNINGS #pragma GCC optimize(2) #pragma GCC optim ...
- spring boot: 从配置文件中读取数据的常用方法(spring boot 2.3.4)
一,从配置文件中读取数据有哪些方法? 通常有3种用法: 1,直接使用value注解引用得到配置项的值 2, 封装到Component类中再调用 3, 用Environment类从代码中直接访问 生 ...
- Prometheus入门教程(三):Grafana 图表配置快速入门
文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/sA0nYevO8yz6QLRz03qJSw 前面我们使用 Prometheus + Grafana ...
- ValidatorException-异常
Java在发送Https请求的时候,不可避免的会发生SSL证书认证失败 错误信息:sun.security.validator.ValidatorException: PKIX path buildi ...