VB.NET (または C#) では、クラス helper.vb のパブリック変数がプロジェクト内のどこかで使用されているかどうかをプログラムで判断するにはどうすればよいですか?
5 に答える
すべての参照を見つけることはあなたの友達です。
MSDNから
Find オブジェクトを使用すると、コード エディターなど、そのような操作をサポートする環境の場所でテキストを検索および置換できます。
主にマクロの記録を目的としています。エディターのマクロ記録メカニズムは、TextSelection.FindPattern ではなく Find を使用します。これにより、グローバルな検索機能を見つけることができます。また、一般に、ファイル内検索などの操作に TextSelection オブジェクトを使用するよりも便利であるためです。
検索操作が Find All などの非同期の場合、操作が完了すると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
リフレクターには分析機能があります。または、これはあなたが求めているある種のランタイム機能ですか?
コードがコンパイルされる前にこれを行うことについて話しているのですか?コンパイルされたアセンブリに対してこれを行うことはおそらく簡単ではありませんが、Mono.Cecilのようなツールが役立つ可能性があります。実際に各メソッドを調べて、問題のプロパティのgetメソッドとsetメソッドの呼び出しについてIL命令を調べる必要があります。ただし、特にSystem.Reflectionの代わりにCecilを使用した場合は、実際にはそれほど悪くないかもしれません。Cecilは、アセンブリを実際にアプリケーションドメインにロードするのではなく、ファイルとして扱うため、はるかに高速です。
プロジェクトの実際のソースコードでこれを実行したい場合は、状況が大きく異なります。Visual Studioアドインについてはよくわかりませんが、プログラムで[すべての参照を検索]コマンドを呼び出して、結果を使用できる場合があります。
System.CodeDomにも役立つものがあるかもしれません。を使用しCodeParser
てコードを解析し、CodeCompileUnit
そこからすべてのメソッドのすべてのステートメントをウォークして、関連するを確認できるようですCodePropertyReferenceExpression
。
リフレクションを使用する必要があり、複雑になります。
なぜプログラムでこれを行うのですか?Visual Studio には、これを実行できる "すべての参照の検索" 機能があることをご存知でしょう。