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

 

同時可以查看下升級方案:

https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-5.0&tabs=visual-studio

 

下載.NET 5.0 SDK (v5.0.100):

https://dotnet.microsoft.com/download/dotnet/5.0

 

下載VS2019:

https://visualstudio.microsoft.com/zh-hans/vs/whatsnew/

 

查看C#相關內容

https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/

 

了解.NET Conf安排

https://devblogs.microsoft.com/dotnet/net-5-0-launches-at-net-conf-november-10-12/

 

查看鏡像版本

https://hub.docker.com/_/microsoft-dotnet-runtime/

 

 

有哪些改進

首先就是性能,許多組件的性能都已經得到了很大的提高,比如Arm64性能和gRPC。

然后就是新語言的改進,C#9和F#5提供了新的語言改進,比如頂級程序,比如邏輯和屬性模式匹配,比如Record記錄,比如可空注釋,當然還有Windows的窗體設計器。

還有一些其他的,比如Json序列化,正則,HTTP性能,垃圾回收。

還有ClickOnce客戶端發布,單文件應用程序,縮小容器鏡像大小等等。

當然,我這里也就是泛泛而談,網上已經充滿了各種資料,想必都已經看過了,我就不贅述了。

 

 

關於命名的問題

這個已經不是一個同學問我了,為啥叫.NET5.0,這里是兩部分,第一個就是.NET,這個是很好理解的,畢竟是大一統嘛。

.NET 5 = .NET Core vNext,

簡單點說呢,就是在Core的基礎上,把Framework的大部分Api給融入了進去,這樣就是統一了。

 

然后就是5.0了,這里有個圖,你一看就知道啥意思了:

 

 

 

就是要和.NETFramework做區分,所以取名為5的版本,是這個意思。

 

好啦,基本的的介紹呢,如果要鋪開了來講,三篇都不夠,所以關於性能的調試等數據,以后會出報告,我們先懷着激動的心直接升級項目吧,更多的文檔以后同步更新。

 

 

 

 

 

 

 

一、更新開發環境

 

其實我們都是從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,可見官方也默認了這種方式。

 

 

 

4、升級帶來的改變

第一個就是內聯參數提示

進到項目里,也看到了和3.1是一樣的,只不過官方承諾的參數提示終於完整的加上了,VS2019預覽版做的不是很好,目前這個已經很OK了。

如果升級到16.8,還是沒有看到,需要開啟下配置,在工具-選項-編輯器-C#-高級-開啟內聯參數

(VS參數提示)

 

第二個就是git操作頁面的改變

如果自己用着不舒服,可以切換回老版本,取消勾選就行:

 

 (取消新版git)

 

 

那本地開發咱們說完了,服務器怎么來操作下呢,沒有任何麻煩,十分簡單,我下邊會說3個情景,首先是IIS,然后一個是直接Linux服務器+Docker托管運行的,一種是基於Jenkins下使用Docker托管的。

 

二、WINDOWS+IIS

 

1、安裝IIS

 

首先是安裝IIS這個,就很簡單的了,我就不多說了

 

 

 

 

 

安裝后,重啟服務器需要,就可以看到了

 

 

 

 

 

 

2、下載安裝.NET5運行時

可能需要重啟,如果安裝后無效。

地址:https://dotnet.microsoft.com/download/dotnet/5.0

 

 

直接安裝捆綁的hosting.exe的安裝包就行,這里除了運行時還有windows server host宿主機。

只不過我習慣把SDK也安裝下,因為我用的是源碼,命令行發布的

 

安裝好后,可以在控制面板中找到

 

 

 

 

 

 

3、IIS部署站點

這個很簡單,構建好站點后,點擊模塊,看是否正常顯示,否則的話,會有500.19錯誤。

 

 

 

 

 

 

 

最終的效果是

 

4、常見錯誤

1、500.19

確保點擊“模塊”,能正確打開,打不開的話,就是沒有安裝指定的v2模塊,安裝host捆綁包就行。

 

2、502.5

進程外無法使用,需要修改下web.config為進程內

 

 如果一定想要進程外模式的話,就安裝SDK吧。

記得要重啟服務器喲。

 


 

三、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 baseWORKDIR /appEXPOSE 80

如果你直接修改3.1為5.0,那用這個Dockerfile構建鏡像是找不到源鏡像的,新版的是這樣的:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS baseWORKDIR /appEXPOSE 80

 

沒錯,你一定看出來了,少了一個core的路徑,從這個小地方,就可以看得出來,微軟官方的想法是怎樣的。

 

好啦,那沒有什么了,直接提交到服務器,構建鏡像吧:

 

 

 

完成。

 

 

 

四、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倉庫里,查看具體的流程說明。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM