首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

使用 EnvDTE 宏自動格式化整個方案:一鍵統一程式碼風格

     編輯:關於.NET

Visual Studio 僅提供單一檔案格式化功能(Edit → Advanced → Format Document),缺乏「格式化整個專案/方案」的內建指令。針對開源專案程式碼風格不一(如 C++ 風格大括號換行)的困擾,利用 EnvDTE 自動化模型撰寫巨集,實現遞迴遍歷方案所有專案、專案項目,批次套用格式化。

巨集實作完整代碼

Dim solution As Solution = DTE.Solution

Sub AutoFormatSolution()
    For i As Integer = 1 To solution.Projects.Count
        AutoFormatProject(solution.Projects.Item(i))
    Next
End Sub

Private Sub AutoFormatProject(ByVal proj As Project)
    For i As Integer = 1 To proj.ProjectItems.Count
        AutoFormatProjectItem(proj.ProjectItems.Item(i))
    Next
End Sub

Private Sub AutoFormatProjectItem(ByVal projectItem As ProjectItem)
    ' 僅處理實體檔案 (.cs)
    If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
        If projectItem.Name.EndsWith(".cs") Then
            Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
            window.Activate()
            projectItem.Document.DTE.ExecuteCommand("Edit.FormatDocument")
            window.Close(vsSaveChanges.vsSaveChangesYes)
        End If
    End If
    
    ' 遞迴處理資料夾下的專案項目
    If Not projectItem.ProjectItems Is Nothing Then
        For i As Integer = 1 To projectItem.ProjectItems.Count
            AutoFormatProjectItem(projectItem.ProjectItems.Item(i))
        Next
    End If
End Sub

核心 API 呼叫鏈解析

  1. DTE.Solution → 取得方案物件
  2. Project.ProjectItems → 專案項目集合(含檔案、資料夾)
  3. ProjectItem.Kind = vsProjectItemKindPhysicalFile → 過濾實體檔案
  4. ProjectItem.Open(vsViewKindCode) → 在程式碼編輯器開啟檔案
  5. Window.Activate() → 切換焦點至該視窗(命令需作用於作用中視窗)
  6. DTE.ExecuteCommand("Edit.FormatDocument") → 執行內建格式化命令
  7. Window.Close(vsSaveChangesYes) → 儲存並關閉

三種尋找命令名稱的方法

方法操作步驟適用情境
巨集錄製工具 → 巨集 → 錄製新巨集 → 手動執行一次格式化 → 停止錄製 → 檢視 RecordingModule最簡單,適用已知功能位置
命令視窗檢視 → 其他視窗 → 命令視窗 → 輸入 Edit. → IntelliSense 列出所有子命令快速搜尋命令完整名稱
鍵盤選項工具 → 選項 → 環境 → 鍵盤 → 搜尋框輸入關鍵字確認命令與快捷鍵綁定關係

使用步驟

  1. 開啟 工具 → 巨集 → 巨集總管
  2. 展開 MyMacros → Module1,雙擊開啟編輯器
  3. 貼上上述代碼,儲存
  4. 巨集總管中右鍵 AutoFormatSolution → 執行

擴充建議

  • 支援多語言:擴充副檔名判斷 .vb、.js、.xml 等
  • 排除特定資料夾:跳過 bin、obj、Generated 等非原始碼目錄
  • 整合建置事件:建置前自動執行,確保提交程式碼風格一致
  • 轉為 VS 擴充套件:將巨集封裝為 VSPackage,獲得更好效能與 UI 整合

注意事項

  • 巨集執行期間會開啟/關閉大量視窗,畫面會閃爍,屬正常現象
  • 大型方案執行時間較長,建議非工作時段執行
  • 執行前請確認所有檔案已簽出/可寫入,避免唯讀檔案導致儲存失敗
  • VS 2012+ 已移除巨集支援,新版本請改用 Roslyn 程式碼修正或 dotnet format CLI 工具

這個巨集雖簡單,卻解決了團隊協作中最基礎也最痛點的程式碼風格統一問題,是版本控制前的必備自動化步驟。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved