使用NDepend API和X#,获取特定规则关联问题的GetIssues参数来源咨询
NDepend API获取特定规则关联问题的解决方法
我刚开始使用NDepend API,仍在摸索一些基础概念。我想要列出与某一特定规则相关联的所有问题(我使用X#而非C#,因此语法略有不同)。
我已完成加载项目、运行分析并获取所有问题的操作:
VAR ndprojPath := "Test.ndproj".ToAbsoluteFilePath() VAR ndProject := ndManager.LoadProject(ndprojPath) // Do an analysis VAR analysisResult := ndProject:RunAnalysis() VAR issuesSet := analysisResult:ComputeIssues()
接着我枚举所有规则:
FOREACH nRule AS IRule IN issuesSet:AllRules
现在我希望通过GetIssues()扩展方法获取每个规则的问题:
VAR nIssues := nRule:GetIssues(???)"
我的问题是:该参数从何处获取?它必须是IQueryExecutionSuccessResult类型吗?我从文档中了解到该类型用于代码查询,但此处并未涉及代码查询操作?
解决方法
你完全没必要纠结GetIssues()的参数,因为你已经拿到的IIssuesSet实例(也就是代码里的issuesSet)已经提供了更直接的方法来获取指定规则的问题。
直接用IssuesForRule()方法即可,代码示例如下:
FOREACH nRule AS IRule IN issuesSet:AllRules VAR nIssues := issuesSet:IssuesForRule(nRule) // 在这里处理获取到的nIssues集合 NEXT
如果一定要使用GetIssues()方法,参数确实是IQueryExecutionSuccessResult类型,这个实例可以从analysisResult中获取,代码如下:
VAR queryResult := analysisResult:QueryExecutionSuccessResult FOREACH nRule AS IRule IN issuesSet:AllRules VAR nIssues := nRule:GetIssues(queryResult) NEXT
但这种方式完全没必要,因为IIssuesSet的IssuesForRule()就是专门为这个场景设计的,更简洁高效。
内容的提问来源于stack exchange,提问作者Peter M.
相关产品推荐
相关产品推荐

