Получить функции в VS с помощью макросов - PullRequest
2 голосов
/ 07 января 2010

Как получить все функции, которые есть в файле кода в Visual Studio, с помощью макросов VS? Я использую Visual Studio 2008.

Также мне нужно узнать, является ли функция частной или общедоступной. На данный момент я знаю, что могу просто разобрать код и проверить его самостоятельно, но я хочу сделать его правильно и думать, что среда макросов должна позволять знать всю информацию о функциях.

1 Ответ

1 голос
/ 07 января 2010

См. HOWTO: навигация по элементам кода файла из макроса Visual Studio .NET или надстройки Возможно HOWTO: Вам будет интересно найти файлы решения из макроса Visual Studio .NET или надстройки .

Получить доступность функции легко. После первой статьи у вас есть объект CodeElement. Если он имеет тип CodeFunction, вы можете привести его к типу CodeFunction (или также к CodeFunction2). CodeFunction содержит много свойств, включая Access, который вам нужен. Я изменил ShowCodeElement из этой статьи, чтобы он отображал только функции, а также отображал их доступность:

Private Sub ShowCodeElement(ByVal objCodeElement As CodeElement)

    Dim objCodeNamespace As EnvDTE.CodeNamespace
    Dim objCodeType As EnvDTE.CodeType
    Dim objCodeFunction As EnvDTE.CodeFunction

    If TypeOf objCodeElement Is EnvDTE.CodeNamespace Then

        objCodeNamespace = CType(objCodeElement, EnvDTE.CodeNamespace)
        ShowCodeElements(objCodeNamespace.Members)

    ElseIf TypeOf objCodeElement Is EnvDTE.CodeType Then

        objCodeType = CType(objCodeElement, EnvDTE.CodeType)
        ShowCodeElements(objCodeType.Members)

    ElseIf TypeOf objCodeElement Is EnvDTE.CodeFunction Then

        Try
            Dim msg As String = objCodeElement.FullName & vbCrLf
            Dim cd As EnvDTE.CodeFunction = DirectCast(objCodeElement, CodeFunction)
            Select Case cd.Access
                Case vsCMAccess.vsCMAccessDefault
                    msg &= "Not explicitly specified. It is Public in VB and private in C#."
                Case Else
                    msg &= cd.Access.ToString
            End Select
            MsgBox(msg)
        Catch ex As System.Exception
            ' Ignore
        End Try
    End If

End Sub

Измените его и затем выполните макрос ShowFileCodeModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...