Question

Dans VB.NET (ou C #), comment déterminer par programme si une variable publique de la classe helper.vb est utilisée n’importe où dans un projet?

Était-ce utile?

La solution

De MSDN

L'objet Rechercher vous permet de rechercher et de remplacer du texte à des emplacements de l'environnement prenant en charge de telles opérations, tels que l'éditeur de code.

Il est principalement destiné à l’enregistrement de macros. Le mécanisme d'enregistrement de macros de l'éditeur utilise Find au lieu de TextSelection.FindPattern pour vous permettre de découvrir la fonctionnalité de recherche globale. En général, cela est plus utile que d'utiliser l'objet TextSelection pour des opérations telles que Find-in-files.

Si l'opération de recherche est asynchrone, telle que Tout rechercher, l'événement FindDone se produit à la fin de l'opération.

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

Autres conseils

Trouver toutes les références est votre ami.

Vous devez utiliser la réflexion et ce serait compliqué.

Pourquoi faites-vous cela par programmation? Vous savez que Visual Studio dispose d'un " Trouver toutes les références " fonctionnalité qui peut le faire pour vous.

Reflector est doté de la fonction Analyser. Ou est-ce une sorte de fonctionnalité d'exécution que vous recherchez?

Parlez-vous de le faire avant la compilation du code? Faire cela contre un assemblage compilé ne serait probablement pas trivial, bien que des outils tels que Mono.Cecil puissent aider . Il vous faudrait parcourir chaque méthode et inspecter les instructions IL pour les appels aux méthodes get et set de la propriété en question. Ce n'est peut-être pas si grave, surtout si vous avez utilisé Cecil au lieu de System.Reflection. Cecil est également beaucoup plus rapide, car il traite les assemblys comme des fichiers plutôt que de les charger dans le domaine d'application.

Si vous souhaitez utiliser ceci sur le code source d’un projet, les choses sont très différentes. Je ne connais pas grand-chose à propos des compléments Visual Studio, mais vous pouvez peut-être invoquer l'option "Rechercher toutes les références". commande par programme et utilise les résultats.

Il peut également y avoir quelque chose dans System.CodeDom qui pourrait aider. Il semble que vous pouvez utiliser un CodeParser pour analyser le code dans un CodeCompileUnit , puis parcourir toutes les instructions de toutes les méthodes et rechercher le code CodePropertyReferenceExpression s.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top