iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
佛心分享-IT 人自學之術

靠近 ASP .NET Core 一點點系列 第 4

Day 4 避免版本地獄:如何用 global.json 管理 .NET SDK

  • 分享至 

  • xImage
  •  

引言
.NET Core 中的 global.json 對一個專案非常重要,因為它能確保專案在不同開發環境中使用一致的 .NET SDK 版本。這對於團隊協作非常重要

分享主軸

  • 了解 global.json 在 .NET SDK 版本控制中的重要性
  • 如何正確設定 global.json 以避免版本錯誤
  • 使用 global.json 的個人覺得比較妥的建議 (沒有對錯,只有不同情境下,時空背景下,比較好的做法)

關於 Global.json的重要性
在 .NET 開發中,一台電腦可以安裝多個 SDK 版本。為了確保專案使用正確的 SDK 版本,我們可以使用 global.json 來進行版本控制

  • 版本控制:假設 global.json 設定為 8.0.200,但電腦安裝的 SDK 版本有 8.0.204、8.0.300 等,系統會自動選擇 8.0.200 系列中最新的版本,即 8.0.204,而不會選擇 8.0.300。如下圖所示:

專案global.json設定的版本 :

{
  "sdk": {
    "version": "8.0.200"
  }
}

電腦安裝的版本 :
https://ithelp.ithome.com.tw/upload/images/20240917/20133954pSqtQIj8LU.png

此時因為有在 Global.json 內設定SDK版本,所以系統會根據 global.json 中設定的版本,選擇電腦上安裝的同一系列中最新的修訂版本號(Patch Version) (第三天文章有分享到SDK版本的詳細,若忘記,可以回去看一下 ~ )

  • 錯誤避免
    若 global.json 設定為 8.0.205,但電腦沒有安裝該版本,則會出現錯誤。
    出錯原因為 : 找不到指定的 8.0.205 版本,因為沒有安裝

    同理,若電腦只安裝 8.0.302,而 global.json 設定為 8.0.204,也會出現錯誤。
    出錯原因為 : 找不到指定的 8.0.204 版本,因為沒有安裝,設定為 8.0.300 就不會錯誤

  • 自動選擇最新版本
    若刪除 global.json,電腦會自動使用已安裝的最新版本 SDK。

  • 團隊協作
    在專案中包含 global.json 並進行版本控制,這樣團隊成員在開發時都會使用相同的 SDK 版本,避免因版本不同而產生的問題,也會比較不覺得好像哪裡不對勁的XD
    ( 若沒有 global.json,每人都是按照電腦有安裝的版本去 build,總感覺哪裡怪怪的XD )

  • 補充 :
    就算今天例如 A 電腦裝 8.0.205,B 電腦裝 8.0.208,修訂版本號(Patch Version)通常用於修復漏洞和小錯誤,這些更新是向後兼容的。因此,使用不同的修訂版本號(例如 8.0.204 vs 8.0.208)通常不會對專案的編譯和運行產生重大影響,但為了確保完全一致性,建議團隊成員安裝相同的 SDK 版本。這是可以通過內部溝通和版本管理工具來做規範的,大家遵守。

  • 其他可能情境 :

  1. 若刪除電腦上安裝的 8.0.204 版本,而專案指定使用 8.0.200,則在使用 dotnet build/run/publish 指令時會出現錯誤
  2. 若專案使用 SDK 6.0.301 創建,但電腦只安裝 8.0.300,假使此專案沒有把 global.json 加入版控,則仍可成功 build/publish/run,因為系統會使用電腦上的最新版本(8.0.300)
  • 進階設定 :
    可以下指令創建global.json也可以直接在此json檔案內設定
  1. latestFeature : 確保使用相同主版本和次版本下的最新功能版本。
dotnet new global.json --sdk-version 8.0.200 --roll-forward latestFeature --force
{
  "sdk": {
    "version": "8.0.200",
    "rollForward": "latestFeature"
  }
}

假設 global.json 中設定的版本為 8.0.200,而電腦上安裝的版本有 8.0.204 和 8.0.300,系統會選擇 8.0.300,因為它是同一主版本和次版本中最新的功能版本,如果沒有安裝 8.0.300,則會選擇 8.0.204。

  1. latestPatch : 確保使用相同主版本、次版本下的最新修訂版本
dotnet new global.json --sdk-version 8.0.200 --roll-forward latestPatch --force
{
  "sdk": {
    "version": "8.0.200",
    "rollForward": "latestPatch"
  }
}

假設 global.json 中設定的版本為 8.0.200,而電腦上安裝的版本有 8.0.204 和 8.0.300,系統會選擇 8.0.204,因為它是同一功能主版本、次版本下的最新修訂版本(8.0.2xx)。
如果沒有安裝 8.0.204,則會出現錯誤,提示找不到指定的 SDK 版本。

可以使用此兩指令去對專案進行統一SDK版本設定。

簡單統整今日重點

  1. global.json對於專案其實是重要的,統一開發環境簡化版本管理使團隊成員遵守版本控制規範等等...這些好處。
  2. 透過進階設定可以更有效直接規範SDK版本

今日結語
了解 global.json 這不太起眼的檔案,卻是重要的,讓自己更對於團隊協作開發前期制定一些規範,增加一些重要知識!
明天會再針對 global.json 一些其他可以做的設定做簡單介紹,希望今天有幫助到大家,明天繼續努力!


上一篇
Day 3 愛恨糾葛:.NET Core SDK 與 Runtime 的複雜關係
下一篇
Day 5 專案中的Nuget套件 : 看似日常的套件庫也扮演非常重要地位
系列文
靠近 ASP .NET Core 一點點13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言