使用EnvDTE自动格式整个工程

今天看一C#开源工程的源代码觉得很不习惯,因为作者是使用C++ coding style组织代码的使用EnvDTE自动格式整个工程, 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相似。使用EnvDTE自动格式整个工程使用EnvDTE自动格式整个工程代码DimsolutionAsSolution=DTE.Solution



SubAutoFormatSolution()

ForiAsInteger=1Tosolution.Projects.Count

AutoFormatProject(solution.Projects.Item(i))

Next

End Sub



PrivateSubAutoFormatProject(ByValprojAsProject)

ForiAsInteger=1Toproj.ProjectItems.Count

AutoFormatProjectItem(proj.ProjectItems.Item(i))

Next

End Sub

PrivateSubAutoFormatProjectItem(ByValprojectItemAsProjectItem)

IfprojectItem.Kind=Constants.vsProjectItemKindPhysicalFileThen

IfprojectItem.Name.EndsWith(".cs")Then

DimwindowAsWindow=projectItem.Open(Constants.vsViewKindCode)

window.Activate()

projectItem.Document.DTE.ExecuteCommand(
"Edit.FormatDocument")

window.Close(vsSaveChanges.vsSaveChangesYes)

EndIf

EndIf

'If the projectItem is a fold, apply AutoFormatProjectItem in it recusivly

IfNotprojectItem.ProjectItemsIsNothingThen

ForiAsInteger=1ToprojectItem.ProjectItems.Count

AutoFormatProjectItem(projectItem.ProjectItems.Item(i))

Next

EndIf

End Sub

原文链接: https://www.cnblogs.com/hiber/archive/2010/01/08/1642319.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/6564

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午2:58
下一篇 2023年2月6日 下午2:58

相关推荐