Frage

In VB.NET (oder C #), wie ich programmatisch bestimmen kann, ob eine öffentliche Variable in der Klasse helper.vb innerhalb eines Projektes überall verwendet wird?

War es hilfreich?

Lösung

MSDN

Das Find-Objekt können Sie nach Text suchen und in Orten der Umgebung zu ersetzen, die solche Operationen, wie der Quelltext-Editor unterstützen.

Es ist in erster Linie für den Makroaufnahmezweck. Der Makro-Aufnahme-Mechanismus Editor verwendet anstatt TextSelection.FindPattern finden, so dass Sie die globale Suche Funktionalität entdecken können, und weil es in der Regel sinnvoller als mit dem Objekt für Textselection-Operationen wie Find-in-Dateien.

Wenn der Suchvorgang ist asynchron, wie Alle suchen, dann ist die FindDone Das Ereignis tritt auf, wenn der Vorgang abgeschlossen ist.

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

Andere Tipps

Alle Referenzen ist dein Freund.

Sie müssen Reflexion verwenden und es wäre kompliziert sein.

Warum tun Sie diese programmaticly? Sie wissen, dass Visual Studio eine „alle Verweise finden“ Funktion, die dies für Sie tun können.

Reflector hat die Funktion analysieren. Oder ist dies eine Art Laufzeit Funktionalität sind Sie nach?

Sprechen Sie über das tun dies, bevor der Code kompiliert wird? Dadurch gegen eine kompilierte Assembly wäre wahrscheinlich nicht trivial, wenn auch Tools wie Mono.Cecil helfen könnte . Sie müssten eigentlich jede Methode gehen und die IL Anweisungen für Anrufe an die in Frage kommen und setzen Methoden der Immobilie zu inspizieren. Es könnte in der Tat nicht so schlimm sein, obwohl, besonders wenn man Cecil statt System.Reflection verwendet. Cecil ist auch viel schneller, als es Baugruppen wie Dateien behandelt, anstatt sie tatsächlich in der Anwendungsdomäne geladen werden.

Wenn Sie wollen dies auf dem tatsächlichen Quellcode eines Projekts Dinge auszuführen, sind ganz anders. Ich weiß nicht viel über Visual Studio-Add-Ins, aber Sie könnten die „Suche alle Verweise“ Befehl programmatisch aufgerufen werden können, und die Ergebnisse nutzen.

Es könnte auch etwas in System.CodeDom sein, die helfen könnten. Es sieht aus wie Sie eine CodeParser verwenden könnte den Code in ein CodeCompileUnit zu analysieren, und dann von dort aus alle Aussagen in allen Verfahren zu gehen und überprüfen zu verwandten CodePropertyReferenceExpressions.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top