1. 程式人生 > >從 3.1 到 5.0 —— OpenReservation 更新記

從 3.1 到 5.0 —— OpenReservation 更新記

# OpenReservation 從 asp.net core 3.1 到 5.0 ## Intro OpenReservation 是一個開源的預約系統,最初的版本是我們學校的活動室預約系統,現在正逐步變成一個更為通用的預約系統。.NET5 釋出之後也是把這個專案更新到了 5.0。 這個專案是一個做了很長時間的專案,從原來的 asp.net WebForm 到 asp.net mvc 再到 asp.net core,現在不僅僅支援伺服器端渲染,也支援了 Web API + SPA 的模式, 從應用部署上來說,從原來的只支援 IIS 部署,到現在支援跨平臺部署,支援 docker 以及 k8s,helm 部署,從原來每次都是手動釋出部署,到現在基於 Azure DevOps 的自動化 CI/CD 部署。 ## 專案檔案更新 原來的 `TargetFramework` 是 `netcoreapp3.1` 的需要更新成 `net5.0`,原來 3.1 的包引用需要更新成 5.0,因為很多包的版本都是一樣的所以我在專案根目錄加了一個 `Directory.Build.props` 設定了一個變數,要更新的時候每次更新這個變數就可以了。 ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121133552400-1764969387.png) 因為從 .net5.0 開始就淡化 .net core 了,都是 dotnet,所以變數名我也從 `DotNetCorePackageVersion` 更新成了 `DotNetPackageVersion`, 另外一個更新是有的 `netstandad2.0` 的專案更新成了 `netstandard2.1`,因為我要使用 `efcore5.0`,需要 `.netstandard2.1` 的 Target ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121134001987-2096846818.png) ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121134041378-166058169.png) ## JSON 更新 微軟從 3.0 開始引入了自己的 `System.Text.Json` 來作為預設的 Json 序列化器,之前更新的時候覺得 `System.Text.Json` 的 BUG 太多,還是使用的 JSON.Net(Newtonsoft.Json),這次升級到 5.0 之後,開始使用微軟的 `System.Text.Json` 來作為 asp.net core 的 JSON 序列化器,這樣也可以少一個引用 ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121135020498-1216740970.png) Startup 變更: ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121135105076-486253153.png) ## Dockerfile dockerfile 的更新在之前的文章中已經有過介紹,需要把 docker 映象名稱中的 `core` 去掉,然後修改 `tag` 從 3.1 到 5.0 ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121134309828-282937045.png) ## CI update 目前在用的 CI 是 Azure DevOps 和 Github Actions,需要將 Build 的 dotnet sdk 更新到 5.0,現在這兩種 CI 都支援使用 `5.0.x` 來獲取 5.0 版本的最新版本 sdk Azure DevOps CI 變更: ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121133208891-1052034586.png) Github Actions 變更: ![](https://img2020.cnblogs.com/blog/489462/202011/489462-20201121133312056-1949361562.png) ## More 後續更新計劃: 從業務的角度來說,會支援一些更通用的預約配置, - 預約頻次限制,每個預約專案配置每個人每天/每週/每月最多可以預約次數 - 預約時間段允許多次預約,當前每個預約時間段只能被預約一次,有些情況允許同一個時間段多次預約,比如駕校預約,同一時間段允許多人同時預約,也需要限制,需要根據每個預約專案進行配置 可以參考:, 從技術的角度來說,之前我會把日誌寫到 ES 裡,通過 Kibana 來做視覺化,日誌裡也包括了一些 Metrics 之類的資訊,所以後面會增加 Prometheus 和 Grafana, 將一些 Metrics 資訊暴露出去,讓 Prometheus 去抓取應用執行過程中暴露出來的 Metrics,通過 Grafana 做視覺化展示 另外希望能夠在下一個版本中增加組織(租戶)的概念,每個組織可以進行一些定製化的配置,以替代現在的預約詳情,現在還是老的活動室預約的列印頁面 ## Reference - - - -