在Visual Studio中折叠所有项目的最佳/最快/最简单的方法是什么?

Tom*_*son 9 visual-studio

我目前正在使用DPack,因为这会在解决方案资源管理器中为"解决方案"节点添加"折叠所有项目"选项.它工作得很好,但可能需要一段时间才能执行,并不总是完全崩溃一切.

还有更好的选择吗?优选地,免费且易于安装/设置.有很多,但最好的工作,没有任何错误或性能问题.

Tom*_*son 9

我使用以下宏在Visual Studio 2005和Visual Studio 2008中工作:

  1. 查看>其他Windows>宏浏览器(Alt + F8)
  2. 在Macro Explorer中右键单击MyMacros节点
  3. 新模块......
  4. 将它命名为CollapseAll(或任何你喜欢的)
  5. 使用下面显示的代码替换默认代码
  6. 文件>保存折叠全部(Ctrl + S)
  7. 关闭宏编辑器

要设置键盘快捷键:

  1. 工具>自定义...>命令
  2. 键盘...
  3. 显示包含以下内容的命令:Macros.MyMacros.CollapseAll.CollapseAll
  4. 指定键盘快捷键(我使用Alt + C)

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module CollapseAll
    Sub CollapseAll()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim rootNode As UIHierarchyItem = solutionExplorer.UIHierarchyItems.Item(1)

        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Sub CollapseSelected()

        ' Get the the Solution Explorer tree
        Dim solutionExplorer As UIHierarchy
        solutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()

        ' Check if there is any open solution
        If (solutionExplorer.UIHierarchyItems.Count = 0) Then
            Return
        End If

        ' Get the top node (the name of the solution)
        Dim selected As Array = solutionExplorer.SelectedItems

        If (selected.Length = 0) Then Return

        Dim rootNode As UIHierarchyItem = selected(0)
        rootNode.DTE.SuppressUI = True

        ' Collapse each project node
        Collapse(rootNode, solutionExplorer)

        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.

        rootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        rootNode.DTE.SuppressUI = False

    End Sub

    Private Sub Collapse(ByVal item As UIHierarchyItem, ByRef solutionExplorer As UIHierarchy)

        For Each innerItem As UIHierarchyItem In item.UIHierarchyItems
            If innerItem.UIHierarchyItems.Count > 0 Then

                ' Re-cursive call
                Collapse(innerItem, solutionExplorer)

                ' Collapse
                If innerItem.UIHierarchyItems.Expanded Then
                    innerItem.UIHierarchyItems.Expanded = False
                    If innerItem.UIHierarchyItems.Expanded = True Then
                        ' Bug in VS 2005
                        innerItem.Select(vsUISelectionType.vsUISelectionTypeSelect)
                        solutionExplorer.DoDefaultAction()
                    End If
                End If

            End If
        Next

    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

我没有编写这段代码而且我不确定这段代码来自何处,但是它在网上有各种变化.


aku*_*aku 7

Visual Studio的电源命令可以解决问题.没有注意到它们的任何性能\稳定性问题.


And*_*son 7

对于VS2005,我一直在使用CoolCommands 4.0.旧版3.0版本的功能描述更完整.版本3有一个.msi安装程序.版本4是一个.zip文件(无论如何我的环境都比较容易).

我最喜欢的功能(完整列表的一个子集):

  • 来自解决方案资源管理器:
    • 折叠所有项目
    • 打开包含文件夹(仅限项目/文件级别)
  • 从编辑器上方的文件名选项卡
    • 在Solution Explorer中找到
  • 从编辑器中的上下文菜单中
    • 演示字体