ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记
本文結構
先決條件
升級目標框架(Target Framework)的版本
過時的IHostingEnvironment與IApplicationLifetime對象
Endpoint Routing與AddMvc中間件
Swashbuckle.AspNetCore
總結
手頭有個ASP.NET Core 2.0的項目,打算將里面的依賴包進行一個版本升級,鑒于該項目還是一年前開發(fā)的,使用的是.NET Core 2.0的版本,這次正好借著.NET Core 3.0在上個月剛剛發(fā)布的機會,干脆一起將該項目所使用的.NET Core版本從2.0升級到3.0,但這過程也并不是鼠標點點就能平滑完成的,因此,撰文一篇,簡要介紹一下升級的幾個關鍵點。由于不同的項目所依賴的第三方NuGet包并不相同,所以我只介紹我手上這個項目的升級過程,有些第三方的NuGet包或許還沒有支持.NET Core 3.0的版本,這就需要到這些依賴項的官方主頁或者Github項目上尋找解決方案了。
先決條件
.NET Core 3.0 SDK和Visual Studio 2019 16.3.0以上版本
升級目標框架(Target Framework)的版本
第一步非常簡單,就是在項目上點擊鼠標右鍵,選擇Properties,在打開的項目屬性頁中,將Target framework從.NET Core 2.0改為.NET Core 3.0:
經過這一步操作,我們已經將項目的Target Framework由netcoreapp2.0改為netcoreapp3.0:
然后,不出意外地發(fā)現(xiàn),在解決方案資源管理器中,所有的外部依賴都出現(xiàn)了黃色小嘆號:
編譯輸出窗口也顯示錯誤信息,告知Microsoft.AspNetCore.All這個依賴包無法支持.NET Core 3.0以及更高版本。在NuGet Package Manager中搜索,發(fā)現(xiàn)Microsoft.AspNetCore.All這個依賴包的確沒有3.0的版本:
其實,從.NET Core 3.0開始,所有以“Microsoft.AspNetCore“作為命名開頭的庫,不再提供單獨的NuGet包,這些包所包含的庫文件(DLL)已經全都包含在Microsoft.AspNetCore.App這一公共框架中,而Microsoft.NET.Sdk.Web SDK已經隱式地引用了Microsoft.AspNetCore.App,因此,我們只需要編輯csproj文件,將多余的Microsoft.AspNetCore.XXXX的項目引用刪掉即可(因為項目的SDK已經設置為了Microsoft.NET.Sdk.Web)。刪掉多余的引用之后,保存項目文件,所有黃色小嘆號消失,項目可以正常編譯。
過時的IHostingEnvironment與IApplicationLifetime對象
從.NET Core 3.0開始,IHostingEnvironment與IApplicationLifetime已被標記為“過時(Obsolete)”,這意味著在后續(xù)的.NET版本中,將不再繼續(xù)支持這兩個接口。如果我們在Startup的Configure方法中使用了這兩個對象,那么最好也將這兩個接口分別替換為:IWebHostEnvironment和IHostApplicationLifetime。
Endpoint Routing與AddMvc中間件
ASP.NET Core 3.0默認使用Endpoint Routing,而啟用了Endpoint Routing后,AddMvc中間件就不被支持了。因此,當一個ASP.NET Core項目從2.x升級到3.0的時候,原有的“app.AddMvc()”方法調用就會出現(xiàn)一個警告,即使忽略這個警告強行執(zhí)行程序,也會得到一個異常:
根據(jù)提示,可以用以下代碼來禁用Endpoint Routing,以便繼續(xù)使用app.AddMvc()的方式:
| 1 | services.AddMvc(options => options.EnableEndpointRouting = false); |
也可以使用下面的代碼來替換AddMvc的調用:
| 123456 | app.UseRouting();app.UseEndpoints(endpoints =>{????endpoints.MapControllers();}); |
Swashbuckle.AspNetCore
如果Web API項目使用了Swashbuckle提供的Swagger,建議升級到5.0.0-rc4,雖然是預覽版本,但是對于.NET Core 3.0的支持是挺好的。其中有兩個變化,第一個是在配置Swagger服務的時候,原來使用的是Swagger的Info類,現(xiàn)在改用Microsoft Open API的OpenApiInfo類;第二個就是需要顯式添加Microsoft.Extensions.PlatformAbstractions包引用。
總結
在進行了以上這些部分的調整之后,我們的項目就可以正常運行在.NET Core 3.0上了:
總的來說,ASP.NET Core的版本升級還是非常簡單容易的,有些細節(jié)方面有可能還是需要進一步的調整,就要根據(jù)項目本身的需要而定了。
總結
以上是生活随笔為你收集整理的ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ASP.NET Core 3框架揭秘]
- 下一篇: asp.net ajax控件工具集 Au