BCVP第2期:项目已完成升级.NET5.0

(是时候拿出来这种图了)

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,不用担心升级带来的压力,因为没有压力。具体内容,可以查看官方文档:

https://devblogs.microsoft.com/dotnet/announcing-net-5-0/

2

有哪些改进


首先就是性能,许多组件的性能都已经得到了很大的提高,比如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托管的。

2、Linux+Docker

如果你是用pm2之类的组件托管的,那只需要直接在Linux服务器上安装5.0就行,无论是运行时还是SDK,我直接安装的SDK,我用的是CentOS:

sudo yum update or refresh 
sudo 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 base
WORKDIR /app
EXPOSE 80

如果你直接修改3.1为5.0,那用这个Dockerfile构建镜像是找不到源镜像的,新版的是这样的:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 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://github.com/anjoy8/Blog.Core

https://devblogs.microsoft.com/dotnet/announcing-net-5-0/

https://mp.weixin.qq.com/s/vlKpejgOxwBhZH8R5ZBf6A


基于Net/Core,快速搭建 API & SPA 及微服务应用组织

BASE NETCORE (VUE) PROJECT TEAM

每一个.NET开发者都可以通过自己的开源项目(最好可以配套简单发表些文章)在这里进行分享,BCVP开发者组织的意义就是激发和挖掘更多的作品,可能偏基础,但是都会有价值。目的就是希望:每个人能将从社区学到的知识,进行自己消化和总结,浓缩成一个个独立的项目,接着投入到社区,最后让更多的初学者去了解、去学习、去思想碰撞,从而达到学习来源于社区,最后反哺于社区的良好循环目的,我们都是学生,也都是下一批初学者的老师,这才应该是一个社区正向推动的方法。

地址:
https://github.com/BaseCoreVueProject

可以在Home仓库里,查看具体的流程说明,只要你愿意分享,就来吧。

加入我们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在ASP.NetCore增加文件上传大小

关注架构师高级俱乐部开启架构之路不定期福利发放哦~架构师高级俱乐部读完需要7分钟速读仅需 3 分钟/ 如何在核心中增加文件 ASP.NET 大小 /从ASP.NET 2.0开始最大请求正文大小限制为30MB (28.6 MiB)。在正常情况下,无需增加 HTTP 请求 body …

java完全二叉树最小堆_Java实现最小堆一

Java实现最小堆一堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。最大堆和最小堆是二叉堆的两种形式。最大堆:根结点的键值是所有堆结点键值中最大者。最小堆:根结点的键值是所有堆结…

一个 Task 不够,又来一个 ValueTask ,真的学懵了!

一:背景 1. 讲故事前几天在项目中用 MemoryStream 的时候意外发现 ReadAsync 方法多了一个返回 ValueTask 的重载,真是日了狗了,一个 Task 已经够学了,又来一个 ValueTask,晕,方法签名如下:publ…

Magicodes.IE 3.0重磅设计畅谈

Magicodes.IE 3.0重磅设计畅谈总体设计图Magicodes.IE导入导出通用库,支持Dto导入导出、模板导出、花式导出以及动态导出,支持Excel、Csv、Word、Pdf和Html。IE在去年年底重构一次之后,经过这么长时间的迭代,又迎来了瓶颈。根据本…

php引用类,thinkphp引用类的使用

比如发送邮件类phpmailer1.将核心文件放入ORG目录下2.在使用的地方,引入这个类文件如何引入呢?import(.ORG.phpmailer);这个表示引入当前项目中的ORG中的phpmailer.class.php文件3.引入之后就可以使用文件中的类了public function sendEmail() {import(.…

Net5 已经来临,让我来送你一个成功

没错,那就是“下载成功”。现在,已经可以急速下载.Net5 docker 镜像 .Net 5 进行今天已经正式发布,想必各位已经通过各种渠道了解到了此次发布的所有内容。并且也都体会到了这次凑成三连的金 scott 是什么效果(啊哈,三…

推荐几款强大流行的BI系统

高级架构师俱乐部 读完需要2分钟速读仅需 1 分钟企业在日常运营过程中,需要根据公司实时经营数据来做未来决测或者发现经营中的问题,在此过程中离不开对数据的分析,而平常利用 excel 等方式极大的提高了领导层快速做出决测的成本&#xff0c…

php 4位数字不足补零,php实现数字不足补0的方法

php实现数字不足补0的方法发布时间:2020-08-28 09:51:06来源:亿速云阅读:100作者:小新这篇文章将为大家详细讲解有关php实现数字不足补0的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大…

起点低,怎么破?

职场&认知洞察 丨 作者 / findyi这是findyi公众号分享的第91篇原创文章洋友问:“洋哥,我北漂多年,专科毕业从农村出来,感觉做什么都不顺,我该怎么办”。和他聊了聊,他毕业后就来北京打工,尝…

C# Span 源码解读和应用实践

一:背景 1. 讲故事这两天工作上太忙没有及时持续的文章产出,和大家说声抱歉,前几天群里一个朋友在问什么时候可以产出 Span 的下一篇,哈哈,这就来啦!读过上一篇的朋友应该都知道 Span 统一了 .NET 程序 栈 …

[C#.NET 拾遗补漏]12:死锁和活锁的发生及避免

多线程编程时,如果涉及同时读写共享数据,就要格外小心。如果共享数据是独占资源,则要对共享数据的读写进行排它访问,最简单的方式就是加锁。锁也不能随便用,否则可能会造成死锁和活锁。本文将通过示例详细讲解死锁和活…

64岁Python之父加入微软 | 谁说大龄程序员无出路

喜欢就关注我们吧!现年 64 岁的 Python 创始人 Guido van Rossum 退休一年后再度复出,今天宣布已加入微软开发者部门 (Developer Division).我觉得退休生活乏味又无趣,因此已加入微软开发者部门。做什么工作?选择太多了&#xff0…

JAVA中的GridView每一个赋值,在ASP.NET 2.0中操作数据之六十二:GridView批量更新数据...

导言:在前面的教程,我们对数据访问层进行扩展以支持数据库事务.数据库事务确保一系列的操作要么都成功,要么都失败。本文我们将注意力转到创建一个批更新数据界面.在本文,我们将创建一个GridView控件,里面的每一行记录…

微软发布VS Code Jupyter插件!不止Python!多语言的Jupyter Notebook支持来了!

北京时间 2020 年 11 月 12 日,微软发布了全新的 VS Code Jupyter 插件!Jupyter 插件将 Jupyter Notebook 的功能引入 VS Code,并且将会支持更多语言和使用场景。Jupyter Notebook 支持创建和共享包含代码、方程式、文本和可视化内容的文档&a…

windows安全模式_鲁大师正式挂牌上市,使用鲁大师如何开启笔记本电脑全面节能模式...

10月10日消息,今天360旗下的鲁大师正式挂牌上市。上市之后,鲁大师的盘中涨幅一度扩大至100%,鲁大师的市值也一度达到了14亿港元。过去三个财年,鲁大师的营业收入分别为6981.2万、1.23亿和3.20亿人民币。简单介绍360,36…

跟我一起学Redis之Redis事务简单了解一下

前言关系数据库中的事务,小伙伴们应该是不陌生了,不管是在开发还是在面试过程中,总有两个问题逃不掉:•说说事务的特性;•事务隔离级别是怎么一回事?事务处理不好,数据就可能不准确,…

groovy 字符串截取最后一个_Python入门高级教程--Python 字符串

Python 字符串字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。创建字符串很简单,只要为变量分配一个值即可。例如:var1 Hello World!var2 "Python Runoob"Python 访问字符串中的值Python 不支持单字符类型&a…

java面试题_阿里大厂流出的数百道 Java 经典面试题

BAT 常问的 Java基础39道常见面试题1.八种基本数据类型的大小,以及他们的封装类2.引用数据类型3.Switch能否用string做参数4.equals与的区别5.自动装箱,常量池6.Object有哪些公用方法7.Java的四种引用,强弱软虚,用到的场景8.Hashc…

​被冷落的运算符重载

基本类型可以使用运算符进行运算、比较、取反等操作。如果想使用运算符操作两个对象,我们就需要用到运算符重载。我们先看个例子,假如有个房子类,有长和宽两个属性。代码如下:接下来我们使用House类实例化两个对象:hou…

neo4j 查询同一节点的两个上级_WhatRoute for Mac(互联网流量诊断查询工具)

如果您想在不使用命令行的情况下执行流量诊断查询,那么WhatRoute是一个不错的选择。WhatRoute提供了一个干净且有条理的界面,主要提供Traceroute功能,但也可以执行Ping,域名服务查询,Whois查询以及监控进出计算机的流量…