1341 字
7 分鐘

GitHub Actions windows-11-arm 要換 VS2026?先用新 Runner label 驗證

如果 workflow 使用 GitHub Actions 的 Windows ARM64 runner,現在應該把 Visual Studio 版本當成即將發生的相容性變更處理。GitHub 已宣布 windows-11-arm 會在 2026 年 9 月 21 日至 30 日逐步改用 Visual Studio 2026;依賴 VS2022、特定 SDK 或原生編譯工具的 job,可能在 image 更新後才暴露問題。

比較穩妥的做法是先把代表性 workflow 暫時改到明確的 windows-11-vs2026-arm label,驗證編譯、測試和封裝,再決定是否讓正式工作跟著 windows-11-arm 遷移。不要把目前 label 當成永遠固定在 VS2022 的承諾。

你要跟著 migration,還是先釘住工具鏈?#

Runner label適合用途需要知道的事
windows-11-arm追蹤 GitHub 管理的 Windows ARM image會在公告時程內逐步轉到 VS2026
windows-11-vs2026-arm立即測試 VS2026 ARM64 image用明確 label 把新工具鏈納入驗證
windows-2022仍需 Windows x64 與既有 VS2022 工具鏈不是 ARM64 runner,原生相容性要重新評估

上表的重點是「image 與架構同時選」。如果專案必須使用 ARM64 編譯結果,不能只因為 VS2022 還沒準備好就改用 x64 runner;反過來,若只是測試 Windows 相容性且沒有 ARM 原生需求,windows-2022 可能是暫時選項,但它代表另一種架構和工具鏈。

先建立一個可手動觸發的驗證 workflow#

先不要一次修改所有 production job。建立只在 workflow_dispatch 執行的檢查,讓團隊能在 VS2026 image 上取得作業系統、架構、image 版本和基本 .NET/MSBuild 資訊:

name: Windows ARM toolchain check
on:
workflow_dispatch:
jobs:
check:
runs-on: windows-11-vs2026-arm
steps:
- name: Show runner
shell: pwsh
run: |
$env:PROCESSOR_ARCHITECTURE
[System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
$env:ImageVersion
- name: Check toolchain
shell: pwsh
run: |
dotnet --info
if (Get-Command msbuild -ErrorAction SilentlyContinue) {
msbuild -version
} else {
Write-Error "msbuild was not found on PATH"
}

這只是最低限度的 image 檢查,不是完整相容性測試。msbuild 不一定在 PATH;若專案依賴 Visual Studio 的特定元件,應依 runner image 文件找到實際安裝位置,並用真實 build 指令驗證,而不是因為 dotnet --info 成功就判定整個 workflow 沒問題。

用代表性 job 驗證,不只檢查版本字串#

至少挑一個真正會用到下列路徑的 workflow:

  1. .NET 或 C++ 編譯,包含專案指定的 SDK、PlatformToolset 或 Windows SDK。
  2. Node.js 原生模組安裝,例如 node-gyp、Rust/C++ addon 或需要預編譯 binary 的套件。
  3. 單元測試與整合測試,特別是會載入 Windows DLL、檔案權限或路徑格式的測試。
  4. 產出安裝包、CLI binary 或要上傳到 release 的封裝步驟。

測試結果要連同 Node、.NET、MSBuild、Windows SDK、套件 lockfile 與 image version 保存。這樣 image 真正切換後,才能分辨是 runner 更新造成的差異,還是依賴本身同時改版。

常見風險包括:

風險會看到的現象建議檢查
VS2022 專用 PlatformToolsetC++ 專案找不到工具集或編譯旗標不相容.vcxproj、CMake preset、Windows SDK
原生套件沒有 ARM64 binary安裝時 fallback 到本機編譯,或直接失敗lockfile、node-gyp、Rust target
依賴 x64 第三方 binary測試載入 DLL 時才失敗binary 架構、載入路徑與打包清單
image 內工具位置改變where 或 PATH 找不到命令runner-images 文件與實際 Get-Command

正式切換前做一次雙 label 比對#

可以在短期內用 matrix 讓同一組測試分別跑在 windows-11-armwindows-11-vs2026-arm。若測試時間或 ARM runner 使用量不允許全量比對,至少固定一組 smoke test,涵蓋編譯、原生模組、測試和封裝四個階段。把差異分類成「預期的版本變更」或「必須修正的相容性問題」,不要只用整個 job 的綠/紅判斷。

正式 workflow 可以先使用新 label,再把原本的 label 保留在手動回復分支,但回復也要有截止日。若 workflow 真的要求 VS2022,應明確記錄這項需求和可用 runner,而不是等待 windows-11-arm 的 image 更新後才從排隊或編譯錯誤中推測發生了什麼。

另外,GitHub-hosted runner image 會隨更新週期變化,第三方 actions 也可能有自己的架構支援範圍。建議把 runner label、工具版本輸出和失敗 log 放進 CI 診斷資訊;若你管理的是自架 runner,則要另外盤點 runner image 和更新策略,參考 GitHub Actions 自架 Runner 版本盤點清單的維運方式。

結論很簡單:現在就用 windows-11-vs2026-arm 跑一組真實 smoke test,確認專案是否能接受新工具鏈;9 月 21–30 日期間再觀察 windows-11-arm 的正式遷移。架構需求與 VS 版本需求若不同,應分別做決策。

常見問題#

windows-11-arm 會在 9 月 21 日當天全部切換嗎?#

不會。GitHub 公告的是 2026 年 9 月 21 日開始、到 9 月 30 日完成的逐步更新窗口。不同 job 看到 image 更新的時間可能不同,因此要提早測試。

所有 Windows workflow 都需要改成 windows-11-vs2026-arm 嗎?#

不需要。只有需要 ARM64 且想提前驗證 VS2026 的 job 才適合使用這個 label;其他 job 應依架構、工具鏈和相容性需求選擇支援的 runner。

只把 label 改好就算遷移完成嗎?#

不算。label 只決定 runner image,還要跑代表性編譯、測試、原生模組和封裝,並確認第三方 binary 與 actions 的架構支援。

參考資料:

GitHub Changelog:Windows 11 Arm64 VS2026 image generally available

GitHub-hosted runners 參考文件

actions/runner-images image 清單

GitHub Actions windows-11-arm 要換 VS2026?先用新 Runner label 驗證
https://laplusda.com/posts/github-actions-windows-arm-vs2026/
作者
Zero
發佈於
2026-08-29
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。