VS.NET 查找未使用过的方法

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module SearchALlReference
    Sub SearchAllDocuments()
        For Each doc As Document In DTE.Documents
            If doc.Name.EndsWith(".cs") Then
                SearchAllFunctionReference(doc)
            End If

        Next
    End Sub

    Sub SearchAllFunctionReference(byval doc As Document)
        Dim textSelection As EnvDTE.TextSelection
        Dim codeElement As EnvDTE.CodeElement
        Dim codeElements As EnvDTE.CodeElements
        Dim classElement As EnvDTE.CodeElement
        Dim codeModel As EnvDTE.FileCodeModel = doc.ProjectItem.FileCodeModel
        Dim i, j, k As Integer

        For i = 1 To codeModel.CodeElements.Count
            codeElement = codeModel.CodeElements.Item(i)
            If codeElement.Kind = vsCMElement.vsCMElementNamespace Then
                'クラスを取得
                Dim classElements = codeElement.Children()

                For j = 1 To codeElement.Children().Count
                    If codeElement.Children().Item(j).Kind = vsCMElement.vsCMElementClass Then
                        classElement = codeElement.Children().Item(j)
                        For k = 1 To classElement.Children.Count
                            If classElement.Children().Item(k).Kind = vsCMElement.vsCMElementFunction Then
                                '参照の検索
                                Dim cnt As Integer
                                cnt = SearchReference(classElement.Children().Item(k), doc)
                                'If cnt <= 1 Then MsgBox(classElement.Children().Item(k).Name)
                                If cnt <= 1 Then ShowNotRefenceToOutputWindow(classElement.Name & " : " & classElement.Children().Item(k).Name & Environment.NewLine)

                            End If
                        Next
                    End If
                Next
            End If
        Next

    End Sub

    Function ShowNotRefenceToOutputWindow(ByVal content As String)
        Dim outputWindowPane As OutputWindowPane
        outputWindowPane = GetOutputWindowPane("出力")
        outputWindowPane.Clear()

        outputWindowPane.OutputString(content)
    End Function
    Function GetOutputWindowPane(ByVal Name As String, Optional ByVal show As Boolean = True) As OutputWindowPane
        Dim window As Window
        Dim outputWindow As OutputWindow
        Dim outputWindowPane As OutputWindowPane

        window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
        If show Then window.Visible = True
        outputWindow = window.Object
        Try
            outputWindowPane = outputWindow.OutputWindowPanes.Item(Name)
        Catch e As System.Exception
            outputWindowPane = outputWindow.OutputWindowPanes.Add(Name)
        End Try
        outputWindowPane.Activate()
        Return outputWindowPane
    End Function
    Function SearchReference(ByVal codeElement As EnvDTE.CodeElement, ByVal doc As Document) As Integer
        Dim textSelection As EnvDTE.TextSelection
        Dim resultcount As Integer
        Dim rescaption As String

        Dim regex As New System.Text.RegularExpressions.Regex(" - [0-9]+")

        textSelection = doc.Selection
        Try
            If Not (codeElement Is Nothing) Then
                textSelection.MoveToPoint(codeElement.GetStartPoint(vsCMPart.vsCMPartHeader))
                'エレメント名選択
                textSelection.FindText(codeElement.Name, vsFindOptions.vsFindOptionsMatchCase)
                'すべての参照の検索を実行
                doc.Activate()
                DTE.ExecuteCommand("Edit.FindAllReferences")
                rescaption = DTE.Windows.Item(Constants.vsWindowKindFindSymbolResults).Caption

                '検索結果ウィンドウのタイトルから件数を取得
                resultcount = CType(regex.Match(rescaption).Value.Substring(3), Integer)

                Return resultcount

            End If
        Catch ex As Exception
        End Try

    End Function


End Module

原文地址:https://www.cnblogs.com/si812cn/p/1645259.html