發現前幾天提到的 ASP.NET Core with Vue 專案範本,因未納入官方支援的版本較舊停在 ASP.NET Core 2.0。 我的 Coding4Fun 專案用 2.0 跑其實也沒有什麼問題,但想想未來難免遇到需升級 .NET Core 版本場合,趁機累積點經驗也好。

ASP.NET 官方文件有 1.x 升 2.02.0 升 2.12.1 升 2.22.2 升 3.0 的說明, 照方煎藥即可。

簡單整理 2.0 升 2.2 的 .csproj 修改要點:  

  1. <TargetFramework>netcoreapp2.0</TargetFramework> 改成 <TargetFramework>netcoreapp2.2</TargetFramework>
    基本上修改這條就能改編譯成 2.2,其餘偏向優化調整。
    註:ASP.NET Core 的TFM也可設成 .NET Framework (net461, net472),但既然走 .NET Core 我會以跨平台為目標,後面整理將忽略 .NET Framework/IIS 的注意事項。
  2. <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.AppMicrosoft.AspNetCore.All 最重要的差別在於 Microsoft.AspNetCore.App 移除了對第三方套件的依賴 (極少數的例外是 Json.NET、Remotion.Linq 及 IX-Async 因為太重要少了會哭),以確保版本匹配。
    因此,改用 Microsoft.AspNetCore.App 後可能需要手動補回被排除的第三方套件參照。
  3. 移除以下 <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)
  4. <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

Post a comment