程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 使用EnvDTE自動格式整個工程

使用EnvDTE自動格式整個工程

編輯:關於.NET

今天看一C#開源工程的源代碼覺得很不習慣,因為作者是使用C++ coding style組織代碼的,  VS只有自動格式單個文件代碼的功能(Edit -> Advanced -> Format Document), 沒有自動格式整個工程的選項, 沒辦法,只能自己動手寫個宏了。

首先打開Marcos Explorer ( Tools -> Marcors -> Macro Explorer), 然後在Marcos Explorer中選中MyMacros -> Module1,雙擊打開Module1,添加如下代碼到Public Module Module1和End Module之間並保存,回到Marcos Explorer,我們看到AutoFormatSolution己經在Module1了,右鍵Run就可以了。

程序比較簡單,就是在每個Project的ProjectItem上遞歸調用AutoFormatProjectItem (因為ProjectItem可能是一個Folder),我簡單說下DTE.ExecuteCommand("Edit.FormatDocument"), 這個命令可以通過如下幾種方法獲得,相對來說1最單,但有時我們沒法通過宏錄制得到我們感興趣的東西,只能通過2,3去硬找...

1. 打開宏錄制,然後手動執行一次FormatDocument,關閉宏錄制,在Macros Explorer中的RecordingModule中你就可以看到相應的信息

2. 打開Command Window (View -> Other Windows -> Command Window), 然後進行嘗試,最後找出你需要的Command,Command一般跟你要執行的操作是有一一對應關系。比如我們要在Edit菜單下執行Format Document,那麼你可以先打Edit.,然後在彈出的CompletionList中找你需要的命令

3. 在Tools -> Options -> Environment -> Keyboard窗口中進行查詢,查詢的方法基本和2相似。

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)
         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 the projectItem is a fold, apply AutoFormatProjectItem in it recusivly
         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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved