2008-09-25 13 views

risposta

2

Da MSDN

L'oggetto Trova Consente di cercare e sostituire il testo in luoghi dell'ambiente che supportano tali operazioni, come ad esempio l'editor di codice.

È destinato principalmente alla registrazione di macro. Il meccanismo di registrazione macro dell'editor utilizza Trova piuttosto che TextSelection.FindPattern in modo che tu possa scoprire la funzionalità di ricerca globale e perché generalmente è più utile dell'utilizzo dell'oggetto TextSelection per operazioni come Find-in-file.

Se l'operazione di ricerca è asincrona, come Trova tutto, quindi l'evento FindDone si verifica quando l'operazione viene completata.

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 
0

È necessario utilizzare la riflessione e sarebbe complicato.

Perché stai programmaticamente? Sai che Visual Studio ha una funzione "Trova tutti i riferimenti" che può farlo per te.

3

Trova tutte le referenze è tuo amico.

0

Il riflettore ha la funzione Analizza. Oppure, questa è una sorta di funzionalità di runtime che stai cercando?

0

Stai parlando di fare questo prima che il codice sia compilato? Fare questo contro un assembly compilato non sarebbe probabilmente banale, anche se strumenti come Mono.Cecil potrebbero aiutare. Dovresti effettivamente seguire ogni metodo e ispezionare le istruzioni IL per le chiamate ai metodi get e set della proprietà in questione. Potrebbe non essere poi così male, specialmente se hai usato Cecil invece di System.Reflection. Anche Cecil è molto più veloce, poiché tratta gli assembly come file anziché caricarli effettivamente nel dominio dell'applicazione.

Se si desidera eseguire ciò sul codice sorgente effettivo di un progetto, le cose sono molto diverse. Non so molto sui componenti aggiuntivi di Visual Studio, ma potresti essere in grado di richiamare il comando "Trova tutti i riferimenti" a livello di codice e utilizzare i risultati.

Potrebbe anche esserci qualcosa in System.CodeDom che potrebbe aiutare. Sembra che potresti utilizzare un codice per analizzare il codice in un numero CodeCompileUnit, quindi da lì a piedi tutte le istruzioni in tutti i metodi e verificare i relativi valori CodePropertyReferenceExpression s.

Problemi correlati