2008-09-25 8 views

Respuesta

2

De MSDN

El objeto Buscar le permite buscar y reemplazar texto en lugares del entorno que soporte este tipo de operaciones, como el editor de código.

Está destinado principalmente a la macro grabación. El mecanismo de macrocomprobación del editor usa Find en lugar de TextSelection.FindPattern para que pueda descubrir la funcionalidad de búsqueda global y porque, por lo general, es más útil que usar el objeto TextSelection para operaciones tales como Find-in-files.

Si la operación de búsqueda es asincrónica, como Buscar todo, el evento FindDone se produce cuando la operación finaliza.

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

Tendrías que usar el reflejo y sería complicado.

¿Por qué lo hace programáticamente? Usted sabe que Visual Studio tiene una función "Buscar todas las referencias" que puede hacer esto por usted.

3

Encuentra todas las referencias es tu amigo.

0

Reflector tiene la función Analizar. ¿O es esto algún tipo de funcionalidad de tiempo de ejecución que buscas?

0

¿Estás hablando de hacer esto antes de compilar el código? Hacer esto contra un ensamblado compilado probablemente no sería trivial, aunque herramientas como Mono.Cecil podrían ayudar. En realidad, tendría que caminar cada método e inspeccionar las instrucciones de IL para las llamadas a los métodos de obtención y establecimiento de la propiedad en cuestión. Sin embargo, puede que en realidad no sea tan malo, especialmente si usaste Cecil en lugar de System.Reflection. Cecil también es mucho más rápido, ya que trata los ensamblajes como archivos en lugar de cargarlos en el dominio de la aplicación.

Si quiere ejecutar esto en el código fuente real de un proyecto, las cosas son muy diferentes. No sé mucho sobre complementos de Visual Studio, pero es posible que pueda invocar el comando "Buscar todas las referencias" mediante programación y usar los resultados.

También podría haber algo en System.CodeDom que podría ayudar. Parece que podría usar un CodeParser para analizar el código en un CodeCompileUnit y, a partir de ahí, recorrer todas las declaraciones en todos los métodos y comprobar si hay CodePropertyReferenceExpression s relacionadas.

Cuestiones relacionadas