SDK 版本決定邏輯(由 dotnet CLI 控制) - daniel-qa/RooCode GitHub Wiki
SDK 版本決定邏輯(由 dotnet CLI 控制)
在 ASP.NET 或任何 .NET 專案中,專案設定檔(.csproj)本身是不能直接「指定 SDK 版本」的,這是大家常搞混的地方
.NET 專案的 .csproj 只能指定 目標框架(Target Framework),例如:
<TargetFramework>net8.0</TargetFramework>
這表示你的程式需要使用 .NET 8 Runtime 和 API,但它不會強制用哪個 SDK 版本來編譯,實際使用哪個 SDK,取決於幾件事:
1 .如果有 global.json 檔案
→ 使用其中指定的 SDK 版本。
2 如果沒有 global.json
→ 使用安裝的 SDK 中,最高的可相容版本(例如你指定 net8.0,那 dotnet CLI 會找已安裝的 SDK 是否有支援 .NET 8)。
正確做法:用 global.json 鎖定 SDK
如果你想「強制」**這個專案用特定 SDK 編譯(即使機器上有更高的版本),就要在專案根目錄放 global.json:
{
"sdk": {
"version": "8.0.100"
}
}
這樣在 VSCode 或命令列下執行 dotnet build,就會使用 8.0.100 SDK,即使你系統有 9.0。
額外補充:
TargetFramework 控制執行環境(例如部署到哪個 runtime)。
global.json 控制 SDK(開發與建置工具)。
兩個是分工合作、各司其職 🛠️✨