ASP.NET Core 2.0 升級 2.2 雜記
1 |
發現前幾天提到的 ASP.NET Core with Vue 專案範本,因未納入官方支援的版本較舊停在 ASP.NET Core 2.0。 我的 Coding4Fun 專案用 2.0 跑其實也沒有什麼問題,但想想未來難免遇到需升級 .NET Core 版本場合,趁機累積點經驗也好。
ASP.NET 官方文件有 1.x 升 2.0、2.0 升 2.1、2.1 升 2.2、2.2 升 3.0 的說明, 照方煎藥即可。
簡單整理 2.0 升 2.2 的 .csproj 修改要點:
<TargetFramework>netcoreapp2.0</TargetFramework>
改成<TargetFramework>netcoreapp2.2</TargetFramework>
基本上修改這條就能改編譯成 2.2,其餘偏向優化調整。
註:ASP.NET Core 的TFM也可設成 .NET Framework (net461, net472),但既然走 .NET Core 我會以跨平台為目標,後面整理將忽略 .NET Framework/IIS 的注意事項。<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.7" />
改成<PackageReference Include="Microsoft.AspNetCore.App" />
ASP.NET Core 開發團隊在 2.1 版做了一個革新,建議開發者用 Microsoft.AspNetCore.App 取代 Microsoft.AspNetCore.All。 Microsoft.AspNetCore.App 為 Metapackage, 實質上是張 NuGet Package 清單,列舉 ASP.NET Core、EF Core 所需的 Package, 而 Microsoft.AspNetCore.App 與 Microsoft.AspNetCore.All 最重要的差別在於 Microsoft.AspNetCore.App 移除了對第三方套件的依賴 (極少數的例外是 Json.NET、Remotion.Linq 及 IX-Async 因為太重要少了會哭),以確保版本匹配。
因此,改用 Microsoft.AspNetCore.App 後可能需要手動補回被排除的第三方套件參照。- 移除以下
<DotNetCliToolReference>
(2.1 起改為 .NET Core CLI 內建,不需額外參照:- Microsoft.DotNet.Watcher.Tools (dotnet watch)
- Microsoft.EntityFrameworkCore.Tools.DotNet (dotnet ef)
- Microsoft.Extensions.Caching.SqlConfig.Tools (dotnet sql-cache)
- Microsoft.Extensions.SecretManager.Tools (dotnet user-secrets)
<DotNetCliToolReference>
Microsoft.VisualStudio.Web.CodeGeneration.Tools 可移除,改用 dotnet tool install -g dotnet-aspnet-codegenerator 安裝成所有專案共用。
.vscode/launch.json 的 "program": "$/bin/Debug/netcoreapp2.2/test-app.dll" 版號記得要調整。
程式方面,Program.cs 與 Startup.cs 可考慮調整(非必要),因細節較瑣碎請自行參考官方文件 Changes to Main、Changes to Startup 小節。
如果原本 2.0 有使用 Identity UI,可考慮改用走 Razor Class Library(RCL) 的新版,讓專案架構更簡潔些。
可考慮修改 _Layout.cshtml 加入 <partial name="_CookieConsentPartial" /> 以符合 GPDR 要求,jQuery 由 2.2.0 升至 3.3.1(2.1 專案多了 Views/Home/Privacy.cshtml 也有助於符合 GDPR 可一併偷來用),_ValidationScriptsPartial.csthml jquery.validation 由 1.14.0 升至 1.17.0。
心得:2.0 升 2.2 修改<TargetFramework>netcoreapp2.2</TargetFramework>
即可升級,餘下的多屬優化微調,工程不大。
我還順便看了尚在 Preview 階段的 3.0,其變化幅度較大:不需要在 .csproj 裡參照 Microsoft.AspNetCore.App 或 Microsoft.AspNetCore.All,一些組件已改內建不需參照,有些組件則從 Microsoft.AspNetCore.App 移除,需要額外加入參照,如:Microsoft.EntityFrameworkCore 及 System.Data.SqlClient。一個大消息是 ASP.NET Core 3.0 移除對 Json.NET 的依賴,JSON 處理 API 改內建以藉由 .NET Core 2.1 新推出的 Span<T>(又是一個值得關注的新玩意兒)提升效能,但 JSON 處理改為可抽換式允許開發者選用偏好版本,故亦可沿用 Json.NET。此外,Program.cs 裡的 IWebHostBuilder 需微調為 IHostBuilder。 3.0 仍處於預覽階段,仍可能有小幅調整,等正式推出後再玩好了。
Notes about migrating current ASP.NET Core 2.0 project to 2.2.
Comments
# by 星寂
我升的時候被 AspNetCoreHostingModel 坑到.....原來還不能用orz