プロジェクトで変数がプログラムで使用されているかどうかをどのように確認しますか?

StackOverflow https://stackoverflow.com/questions/136829

質問

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

役に立ちましたか?

解決

MSDN

から

検索オブジェクトを使用すると、コードエディターなど、このような操作をサポートする環境の場所でテキストを検索および置換できます。

主にマクロの記録を目的としています。エディターのマクロ記録メカニズムは、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。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top