プロジェクトで変数がプログラムで使用されているかどうかをどのように確認しますか?
質問
VB.NET(またはC#)では、クラスhelper.vbのパブリック変数がプロジェクト内のどこで使用されているかをプログラムで判断できますか?
解決
検索オブジェクトを使用すると、コードエディターなど、このような操作をサポートする環境の場所でテキストを検索および置換できます。
主にマクロの記録を目的としています。エディターのマクロ記録メカニズムは、TextSelection.FindPatternではなくFindを使用するため、グローバル検索機能を見つけることができます。また、一般に、Find-in-filesなどの操作に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 などのツールが役立つ可能性があります。実際に各メソッドを調べて、問題のプロパティのgetおよびsetメソッドの呼び出しについてIL命令を調べる必要があります。ただし、特にSystem.Reflectionの代わりにCecilを使用した場合は、それほど悪くないかもしれません。 Cecilは、アセンブリを実際にアプリケーションドメインに読み込むのではなく、ファイルとして処理するため、はるかに高速です。
プロジェクトの実際のソースコードでこれを実行する場合は、状況が大きく異なります。 Visual Studioアドインについてあまり知りませんが、「すべての参照を検索」を呼び出すことができるかもしれません。プログラムでコマンドを実行し、結果を使用します。
また、System.CodeDomに何か役立つものがあるかもしれません。 CodeParser
を使用してコードを解析して CodeCompileUnit
にし、そこからすべてのメソッドのすべてのステートメントを調べて、関連する CodePropertyReferenceExpression
s。