7

在 VB.NET(或 C#)中,如何以编程方式确定类 helper.vb 中的公共变量是否在项目中的任何位置使用?

4

5 回答 5

3

查找所有参考资料是您的朋友。

于 2008-09-25T23:26:39.463 回答
2

来自MSDN

Find 对象允许您在支持此类操作的环境中搜索和替换文本,例如代码编辑器。

它主要用于宏录制目的。编辑器的宏记录机制使用 Find 而不是 TextSelection.FindPattern 以便您可以发现全局查找功能,并且因为它通常比使用 TextSelection 对象更有用,例如在文件中查找等操作。

如果搜索操作是异步的,例如 Find All,则FindDone事件会在操作完成时发生。

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
于 2008-09-26T21:00:59.247 回答
0

您将需要使用反射,这会很复杂。

为什么要以编程方式执行此操作?您知道 Visual Studio 有一个“查找所有引用”功能可以为您完成这项工作。

于 2008-09-25T23:24:26.130 回答
0

反射器具有分析功能。或者,这是您追求的某种运行时功能吗?

于 2008-09-25T23:27:54.187 回答
0

你是说在编译代码之前这样做吗?尽管像Mono.Cecil这样的工具可以提供帮助,但对已编译的程序集执行此操作可能并非易事。您必须实际遍历每个方法并检查 IL 指令以调用相关属性的 get 和 set 方法。但实际上它可能并没有那么糟糕,特别是如果您使用 Cecil 而不是 System.Reflection。Cecil 也快得多,因为它将程序集视为文件,而不是将它们实际加载到应用程序域中。

如果您想在项目的实际源代码上运行它,情况会大不相同。我对 Visual Studio 加载项了解不多,但您可能能够以编程方式调用“查找所有引用”命令并使用结果。

System.CodeDom 中可能还有一些可以提供帮助的东西。看起来您可以使用 aCodeParser将代码解析为 a CodeCompileUnit,然后从那里遍历所有方法中的所有语句并检查相关CodePropertyReferenceExpression的 s。

于 2008-09-26T00:26:14.280 回答