In VB.NET (o C#) come è possibile determinare a livello di programmazione se una variabile pubblica in classe helper.vb viene utilizzata in qualsiasi punto all'interno di un progetto?Come si controlla se una variabile viene utilizzata in un progetto a livello di programmazione?
risposta
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
È 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.
Trova tutte le referenze è tuo amico.
Il riflettore ha la funzione Analizza. Oppure, questa è una sorta di funzionalità di runtime che stai cercando?
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.
- 1. Controlla a livello di programmazione se gem in bundle?
- 2. Come si calcola una variabile in JavaScript se e solo se viene utilizzata?
- 3. Come si controlla a livello di programmazione se sono state modificate le proprietà di un documento di MS Word 2007?
- 4. Come prevenire l'attivazione dell'evento CheckedChanged quando si controlla un controllo a livello di programmazione?
- 5. Creare un progetto Visual Studio a livello di programmazione
- 6. Controlla variabile se è in un elenco
- 7. Creazione a livello di programmazione di un progetto
- 8. Come si crea un UIViewController a livello di programmazione?
- 9. Controlla se una variabile contiene un valore numerico in Javascript?
- 10. Eclipse: come aggiornare il progetto corrente a livello di programmazione
- 11. Come si modifica un file .png a livello di programmazione?
- 12. Come si dice a livello di programmazione se si esegue Architect/StatET?
- 13. Come si controlla quale versione di un file msbuild viene utilizzata tra .NET4 e 4.5RC?
- 14. Pythoncially controlla se il nome di una variabile è valido
- 15. XCode 6 - iOS 8: controlla a livello di programmazione se è installata la vista
- 16. Come ignorare a livello di programmazione una notifica di PhoneGap
- 17. Come si può rilanciare il Finder a livello di programmazione?
- 18. Come si aggiunge UIButton a UIToolBar a livello di programmazione?
- 19. Controlla se una variabile è una stringa in Ruby
- 20. Come faccio a controllare a livello di programmazione se il menu della mia attività viene visualizzato in un determinato momento?
- 21. Come si controlla il tipo di una variabile locale?
- 22. Come si salva un valore in un campo personalizzato in JIRA a livello di programmazione?
- 23. Come generare un nuovo progetto di Visual Studio in un progetto di Visual Studio a livello di programmazione?
- 24. Come verificare a livello di programmazione se un assembly gestito è x86, x64 o AnyCPU?
- 25. Come si memorizza un risultato in una variabile e si controlla il risultato in modo condizionale?
- 26. Come si rilevano i bot a livello di programmazione
- 27. Come si ottiene l'imballaggio bidimensionale 2D a livello di programmazione?
- 28. Come ottenere a livello di programmazione il livello audio corrente?
- 29. Come rispondere a una chiamata a livello di programmazione
Un modo non programmatico: commentare la variabile e provare una compilazione :-) – torial