7

VB.NET (または C#) では、クラス helper.vb のパブリック変数がプロジェクト内のどこかで使用されているかどうかをプログラムで判断するにはどうすればよいですか?

4

5 に答える 5

3

すべての参照を見つけることはあなたの友達です。

于 2008-09-25T23:26:39.463 に答える
2

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
于 2008-09-26T21:00:59.247 に答える
0

リフレクターには分析機能があります。または、これはあなたが求めているある種のランタイム機能ですか?

于 2008-09-25T23:27:54.187 に答える
0

コードがコンパイルされる前にこれを行うことについて話しているのですか?コンパイルされたアセンブリに対してこれを行うことはおそらく簡単ではありませんが、Mono.Cecilのようなツールが役立つ可能性があります。実際に各メソッドを調べて、問題のプロパティのgetメソッドとsetメソッドの呼び出しについてIL命令を調べる必要があります。ただし、特にSystem.Reflectionの代わりにCecilを使用した場合は、実際にはそれほど悪くないかもしれません。Cecilは、アセンブリを実際にアプリケーションドメインにロードするのではなく、ファイルとして扱うため、はるかに高速です。

プロジェクトの実際のソースコードでこれを実行したい場合は、状況が大きく異なります。Visual Studioアドインについてはよくわかりませんが、プログラムで[すべての参照を検索]コマンドを呼び出して、結果を使用できる場合があります。

System.CodeDomにも役立つものがあるかもしれません。を使用しCodeParserてコードを解析し、CodeCompileUnitそこからすべてのメソッドのすべてのステートメントをウォークして、関連するを確認できるようですCodePropertyReferenceExpression

于 2008-09-26T00:26:14.280 に答える
0

リフレクションを使用する必要があり、複雑になります。

なぜプログラムでこれを行うのですか?Visual Studio には、これを実行できる "すべての参照の検索" 機能があることをご存知でしょう。

于 2008-09-25T23:24:26.130 に答える