Как вы проверяете, используется ли переменная в проекте программно?
Вопрос
В VB.NET (или C #) как я могу программно определить, используется ли общедоступная переменная в классе helper.vb где-либо в проекте?
Решение
От MSDN
Объект Find позволяет выполнять поиск и замену текста в местах среды, поддерживающих такие операции, таких как редактор кода.
Он предназначен в первую очередь для записи макросов.Механизм записи макросов редактора использует функцию Find, а не TextSelection.FindPattern, чтобы вы могли открыть для себя глобальную функциональность поиска, а также потому, что это, как правило, более полезно, чем использование объекта TextSelection для таких операций, как Поиск в файлах.
Если операция поиска является асинхронной, например, Найти все, то Найддон Событие происходит, когда операция завершается.
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 есть функция "Найти все ссылки", которая может сделать это за вас.
Отражатель имеет функцию анализа.Или это какая-то функциональность во время выполнения, которая вам нужна?
Вы говорите о том, чтобы сделать это до того, как код будет скомпилирован?Выполнение этого для скомпилированной сборки, вероятно, было бы нетривиальным, хотя такие инструменты, как Моно.Сесил могло бы помочь.Вам пришлось бы фактически обойти каждый метод и проверить инструкции IL на предмет вызовов методов get и set рассматриваемого свойства.Хотя, возможно, на самом деле все не так уж и плохо, особенно если вы использовали Cecil вместо System.Размышление.Cecil также намного быстрее, поскольку он обрабатывает сборки как файлы, а не фактически загружает их в домен приложения.
Если вы хотите запустить это в реальном исходном коде проекта, все будет совсем по-другому.Я мало что знаю о надстройках Visual Studio, но вы могли бы программно вызвать команду "Найти все ссылки" и использовать результаты.
Также может быть что-то в System.CodeDom, что могло бы помочь.Похоже, вам мог бы пригодиться CodeParser
чтобы разобрать код в CodeCompileUnit
, а затем оттуда пройдитесь по всем операторам во всех методах и проверьте наличие связанных CodePropertyReferenceExpression
s.