LESSON 1 / 5免費試讀
環境需求提醒: 本課程需要 Windows 11(22H2 以上)、Visual Studio 2026、有效的 GitHub Copilot 訂閱、.NET Framework 4.8 SDK 與 .NET 10 SDK,並非跨平台、純 Mac 或 Linux 就能完整體驗的課程。雖然 GitHub Copilot modernization agent 也能在 VS Code、GitHub Copilot app、GitHub Copilot CLI 上執行,但本課程的操作示範只涵蓋 Visual Studio 這條流程,非 Windows 環境的讀者請先有心理準備。
在本章中,你會開始使用 GitHub Copilot modernization agent,並針對一個小型範例應用程式執行你的第一次評估。過程中你會了解為什麼團隊願意花力氣升級離開 .NET Framework,也會認識 agent 所採用的「評估(Assess)→ 規劃(Plan)→ 執行(Act)」循環。
讀完本章後,你將會:
| 需求 | 版本/備註 |
|---|---|
| Windows | Windows 11(22H2 或更新版本)—— Visual Studio 需要 Windows。若在 macOS 或 Linux 上,請改用 VS Code 或 GitHub Copilot CLI 版本的 agent。 |
| Visual Studio | 2026 版,需安裝 .NET desktop development 工作負載 |
| .NET 10 SDK | 預覽版或最新正式版 |
| GitHub Copilot 訂閱 | 需要有效訂閱 |
| 先備知識 | C#、Visual Studio 基本操作 |
⚠️ 注意: 本章包含 agent 的入門設定。如果你已經用過 GitHub Copilot modernization agent,可以直接跳到〈你的第一次評估〉小節。
你的 .NET Framework 4.8 應用程式現在跑得好好的,為什麼要動它?幾個誠實的理由:
.NET Framework 不會再有新功能。 4.8 與 4.8.1 目前仍受支援,也會隨 Windows 一起出貨,但微軟的主要投入早已轉向現代 .NET。
LTS 版本讓你有可預期的修補期。 現代 .NET 的偶數版本(8、10……)享有 3 年的免費修補期,奇數版本則是 18 個月。這對規劃很有幫助。
執行環境持續變快。 每年一次的新版本都會改進 JIT、GC 以及 ASP.NET Core 的處理流程。如果你好奇進步幅度有多大,「Performance Improvements in .NET」系列文章雖然讀起來很累,但絕對值得。
套件生態系已經轉移。 近期的 Azure SDK、ML.NET、gRPC 與 Aspire 都以現代 .NET 為目標。停留在 4.x 越久,能拉進來用的新套件就越少。
不是每個應用程式都值得做現代化。動手之前,先判斷你的專案屬於哪一類:
| 決策 | 適用時機 | 範例 |
|---|---|---|
| 現代化 | 應用程式仍有業務價值,程式碼狀況也還算合理,你想要的是安全性與生態系上的好處。 | 一個處理訂單的內部 ASP.NET MVC 應用程式。邏輯沒問題,只是依賴套件老舊。 |
| 重寫 | 程式碼一團亂,或架構完全不符合現代模式。 | 一個 20 萬行、沒有測試、SQL 到處寫死在程式碼裡的 Web Forms 巨石應用程式。做現代化的成本會比重寫還高。 |
| 退役 | 幾乎沒人在用,或市面上已有 SaaS 產品能取代它的功能。 | 一個只有五個人在用的自建 HR 入口網站。Microsoft 365 就能涵蓋同樣的工作流程。 |
本課程假設你已經選擇了「現代化」。如果你還不確定,可以先跑一次本章的評估。這份報告能讓你對實際工作量有個務實的認知。
GitHub Copilot modernization agent 會帶著你的專案走過三個階段:評估(Assess)、規劃(Plan)、執行(Execute)。
| 階段 | 做什麼 | 產出 |
|---|---|---|
| 評估 | 掃描程式碼庫,找出相容性問題:已淘汰的 API、重大變更、沒有現代等效版本的 NuGet 套件。 | 一份報告,將發現的問題分類為阻斷項(無法編譯)、警告(已淘汰但仍可運作)或參考資訊(值得日後處理)。 |
| 規劃 | 把評估結果轉換成一份有順序的待辦清單。阻斷項優先,接著是警告,最後才是其他項目。 | 附帶粗估工作量的遷移計畫。 |
| 執行 | 實際進行變更:編輯專案檔、替換已淘汰的 API、提出重構建議。AI 產生建議,你逐一審查。 | 附帶差異(diff)的修改後檔案,供你接受或拒絕。 |
主導權還是在你手上。Agent 負責提案,你負責決定。
flowchart TD
START([舊版 .NET 應用程式])
START --> PHASE1
subgraph PHASE1 ["第一階段 — 評估"]
ASSESS["掃描程式碼庫<br/>API、套件、重大變更"]
REPORT["相容性報告<br/>二進位不相容/原始碼不相容/行為變化"]
ASSESS --> REPORT
end
PHASE1 --> PHASE2
subgraph PHASE2 ["第二階段 — 規劃"]
PLAN["排定發現項目優先順序<br/>阻斷項優先,接著警告,最後參考資訊"]
MIGRATION["遷移計畫<br/>附工作量估計的排序任務"]
PLAN --> MIGRATION
end
PHASE2 --> PHASE3
subgraph PHASE3 ["第三階段 — 執行"]
ACT["AI 提出程式碼變更<br/>專案檔、API 替換、重構"]
REVIEW{開發者審查}
ACT --> REVIEW
end
REVIEW -->|拒絕該項變更| ACT
REVIEW -->|全部接受| DONE([完成現代化的應用程式])
打開 Visual Studio 2026,確認你已安裝 .NET desktop development 工作負載,並啟用以下選用元件:GitHub Copilot、GitHub Copilot modernization agent。
Visual Studio 透過「GitHub Copilot modernization」選用元件內建了 GitHub Copilot modernization agent,所以不需要另外安裝。請透過 Visual Studio Installer,在 .NET desktop development 工作負載中啟用 GitHub Copilot 與 GitHub Copilot modernization 這兩個選用元件。
驗證安裝結果
在 Visual Studio 中開啟一個方案(solution)。
在方案總管(Solution Explorer)中對某個專案按右鍵並選擇 Modernize,或是開啟 GitHub Copilot Chat 並輸入 @Modernize。
現在來對一個小型範例執行評估。它是一個 .NET Framework 4.8 主控台應用程式,裡面刻意放了幾個已淘汰的 API,讓報告有東西可以看。
開啟範例:
00-introduction/code/ 目錄。SimpleLegacyApp.sln。預期結果:
方案載入後會看到一個專案:
Solution 'SimpleLegacyApp' (1 of 1 project)
└── SimpleLegacyApp (net48)
觸發評估:
⚠️ Guided 模式 vs. Flow 模式: Agent 有兩種模式。Flow 模式會自動處理一切;Guided 模式則會在每個階段結束後暫停,讓你先讀報告再決定是否繼續變更。這裡請使用 Guided 模式——本章的重點就是要看懂報告在說什麼。
⚠️ 版本控制: 這次示範我們先略過版本控制。在實際專案上,執行 Act 之前務必先確認你在一個乾淨的 Git 分支上,這樣才能事後比對差異或還原。
預期結果:
Agent 會掃描程式碼並產出一份相容性報告,通常需要 30 到 60 秒。
完成後,報告會在新分頁中開啟:

這份報告是一個叫做「Projects and dependencies analysis」的 markdown 檔案。內容很長,這裡先告訴你該從哪裡開始看。
頂端的「High-level Metrics」表格會給你整體概觀:
| 指標 | 數量 |
|---|---|
| 專案總數 | 1 |
| NuGet 套件總數 | 0 |
| 程式碼檔案總數 | 2 |
| 程式碼總行數 | 81 |
| 問題總數 | 8 |
| 預估需修改的程式碼行數 | 7+(約占程式碼庫的 8.6%) |
以這個範例來說,81 行中有 7 行需要修改,量非常小。在實際的應用程式上,「預估需修改的程式碼行數」這一列會是你第一個關於工作量大小的誠實訊號。
再往下,「API Compatibility」段落把問題分成三個類別:
| 類別 | 意義 |
|---|---|
| 🔴 二進位不相容(Binary Incompatible) | 該 API 已經不存在,無法建置。 |
| 🟡 原始碼不相容(Source Incompatible) | 該 API 變更幅度大到你需要修改程式碼並重新編譯。 |
| 🔵 行為變化(Behavioral change) | 可以正常編譯,但在執行期的行為不同,測試可以抓出這類問題。 |
我們這 7 個問題全部都是原始碼不相容。被分析的 51 個 API 中,有 44 個已經沒問題,不需要處理。
「Technologies and Features」段落把這 7 個問題依領域分組,比一份原始的 API 清單更有參考價值:
System.Web.* 在 ASP.NET Core 中並不存在,需遷移到 ASP.NET Core 的對應方案,或暫時使用 System.Web.Adapters 作為過渡橋接。ConfigurationManager 與 app.config 已由 Microsoft.Extensions.Configuration 取代。BinaryFormatter 已被移除,System.Text.Json 或 protobuf 是常見的替代方案。底部的「Most Frequent API Issues」表格列出了具體類型:System.Web.HttpContext 出現兩次、BinaryFormatter 出現兩次、ConfigurationManager 出現兩次。請記住這些名稱——它們會在第 02 章、agent 提出實際程式碼修改時再次出現。
目前這些問題都還沒被修正,評估(Assess)階段只是告訴你有哪些東西。規劃(Plan)與執行(Act)會留到第 02 章。
第一次評估已經完成,報告也讀過了。你已經知道阻斷項和警告的差異,也理解了評估 → 規劃 → 執行的流程。
第 01 章會把同樣的工作流程套用在規模更大的專案上:BookCatalog,一個 ASP.NET MVC 5 應用程式。你會執行完整的評估、產生升級計畫,並為第 02 章的現代化工作做好準備。
前往下一課:相容性評估:讀懂升級報告
問題: 評估開始執行後卻失敗,出現「Unable to analyze project.」訊息。
解法: 確認你的專案使用的是受支援的來源 framework。Modernization agent 支援的來源 framework 為 .NET Framework(任何版本)、.NET Core 1.x–3.x 以及 .NET 5 或更新版本,目標 framework 則需為 .NET 8 或更新版本。請檢查專案檔中的 <TargetFramework>(舊版 .csproj 則是 <TargetFrameworkVersion>)數值。
📘 深入了解: 支援的升級路徑 — GitHub Copilot modernization overview
問題: GitHub Copilot 在延伸模組設定中顯示「Not signed in」。
解法: 透過 Tools → Options → GitHub → Account 登入 GitHub。你的帳號必須有有效的 Copilot 訂閱(個人版、商業版或企業版)。
📘 深入了解: 在 Visual Studio 中設定 GitHub Copilot
幾個值得參考的後續資源:
BinaryFormatter 安全性指南 —— 為什麼它已被淘汰,以及該用什麼替代。內容來源:本頁翻譯自 Microsoft 開源課程
.NET Modernization for Beginners
,原文連結:https://github.com/microsoft/dotnet-modernization-for-beginners/blob/main/00-introduction/README.mdMIT License, Copyright (c) Microsoft Corporation。
上游沒有官方繁體中文版,本頁由碼力獅社群翻譯為繁體中文
(含技術名詞、程式碼、指令與 API 名稱保留原文),
如與英文原文有出入,以原文為準。
範例程式碼與完整 repo 請直接使用原始 repo。