Как в VB.NET (или C#) программно определить, используется ли общедоступная переменная в классе helper.vb где-либо в проекте?
Как вы проверяете, используется ли переменная в проекте программно?
Ответы (5)
Из MSDN
Объект Find позволяет искать и заменять текст в местах среды, поддерживающих такие операции, например, в редакторе кода.
Он предназначен в первую очередь для записи макросов. Механизм записи макросов редактора использует Find, а не TextSelection.FindPattern, чтобы вы могли обнаружить глобальную функцию поиска, и потому что это обычно более полезно, чем использование объекта TextSelection для таких операций, как поиск в файлах.
Если операция поиска является асинхронной, например, найти все, то по завершении операции возникает событие FindDone.
Sub ActionExample()
Dim objFind As Find = objTextDoc.DTE.Find
' Set the find options.
objFind.Action = vsFindAction.vsFindActionFindAll
objFind.Backwards = False
objFind.FilesOfType = "*.vb"
objFind.FindWhat = "<Variable>"
objFind.KeepModifiedDocumentsOpen = False
objFind.MatchCase = True
objFind.MatchInHiddenText = True
objFind.MatchWholeWord = True
objFind.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
objFind.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
objFind.SearchPath = "c:\<Your>\<Project>\<Path>"
objFind.SearchSubfolders = False
objFind.Target = vsFindTarget.vsFindTargetCurrentDocument
' Perform the Find operation.
objFind.Execute()
End Sub
<System.ContextStaticAttribute()> _
Public WithEvents FindEvents As EnvDTE.FindEvents
Public Sub FindEvents_FindDone(ByVal Result As EnvDTE.vsFindResult, _
ByVal Cancelled As Boolean) _
Handles FindEvents.FindDone
Select Case Result
case vsFindResultFound
'Found!
case else
'Not Found
Ens select
End Sub
Найти все ссылки - ваш друг.
Вам нужно будет использовать отражение, и это будет сложно.
Почему вы делаете это программно? Вы знаете, что в Visual Studio есть функция «Найти все ссылки», которая может сделать это за вас.
Reflector имеет функцию анализа. Или это какая-то функциональность во время выполнения, которую вы ищете?
Вы говорите об этом до компиляции кода? Сделать это против скомпилированной сборки, вероятно, будет непросто, хотя такие инструменты, как Mono.Cecil, могут помочь. . Вы должны были бы пройтись по каждому методу и проверить инструкции IL на наличие вызовов методов get и set рассматриваемого свойства. Хотя на самом деле это может быть не так уж и плохо, особенно если вы использовали Cecil вместо System.Reflection. Cecil также намного быстрее, так как обрабатывает сборки как файлы, а не загружает их в домен приложения.
Если вы хотите запустить это на фактическом исходном коде проекта, все будет по-другому. Я мало что знаю о надстройках Visual Studio, но вы можете программно вызвать команду «Найти все ссылки» и использовать результаты.
В System.CodeDom также может быть что-то, что может помочь. Похоже, вы могли бы использовать CodeParser для анализа кода в CodeCompileUnit, а затем оттуда пройти все операторы во всех методах и проверить наличие связанных CodePropertyReferenceExpression.