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

时间:2020-03-05 18:58:49  来源:igfitidea点击:

我目前正在使用DPack,因为这会在"解决方案资源管理器"中的"解决方案"节点上添加"折叠所有项目"选项。它工作得很好,但是可能要花一些时间才能执行,而且并不总是将所有内容完全折叠起来。

有更好的选择吗?最好是免费的,易于安装/设置。那里有很多东西,但是效果最好,没有任何错误或者性能问题。

解决方案

回答

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

回答

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

我最喜欢的功能(完整列表的一部分):

  • 打开包含文件夹(仅项目/文件级别)

回答

这是CoolCommands 4.0更好的功能列表。

要为VS 2005安装它,请执行include setup.bat。

要为VS 2008安装它,请从

regpkg CoolCommands.dll /codebase

到:

regpkg CoolCommands.dll /root:Software\Microsoft\VisualStudio.0 /codebase

回答

我使用以下在Visual Studio 2005和Visual Studio 2008中可用的宏:

  • 查看>其他Windows>宏浏览器(Alt + F8)
  • 用鼠标右键单击宏资源管理器中的MyMacros节点
  • 新模块...
  • 将其命名为CollapseAll(或者我们喜欢的任何名称)
  • 将默认代码替换为下面显示的代码
  • 文件>保存全部折叠(Ctrl + S)
  • 关闭宏编辑器

设置键盘快捷键:

  • 工具>自定义...>命令
  • 键盘...
  • 显示包含以下内容的命令:Macros.MyMacros.CollapseAll.CollapseAll
  • 分配键盘快捷键(我使用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

我没有编写此代码,也不确定该代码来自何处,但是在线上有很多变化。