首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nDepend -如何使用nDepend API修改"JustMyCode“查询?

nDepend -如何使用nDepend API修改"JustMyCode“查询?
EN

Stack Overflow用户
提问于 2014-11-13 10:57:13
回答 1查看 172关注 0票数 1

我的目标是使用JustMyCode API修改“nDepend”查询。我使用的代码如下:

代码语言:javascript
复制
var justMyCodeGroup = prj.CodeQueries.CodeQueriesSet.ChildGroups.Single(x => x.Name.Contains("JustMyCode"));
var originalQuery = justMyCodeGroup.ChildQueries
            .Single(x => x.QueryString.Contains("Discard generated Types from JustMyCode"));
var changedQuery = originalQuery.Controller.CreateQuery(originalQuery.IsActive,
            query,
            originalQuery.
                DisplayStatInReport,
            originalQuery.DisplayListInReport,
            originalQuery.DisplaySelectionViewInReport,
            originalQuery.IsCriticalRule);

var justMyCodeGroupWithModifiedQuery = justMyCodeGroup.ReplaceQuery(originalQuery, changedQuery);
 prj.CodeQueries.CodeQueriesSet.ReplaceGroup(justMyCodeGroup, justMyCodeGroupWithModifiedQuery);

但是,当我运行上面的代码时,我得到了带有消息的ArgumentException:

newGroup.Controller与此groupOfGroups.Controller不同

有什么帮助吗?

更新1:我还尝试了代码:

代码语言:javascript
复制
       var justMyCodeGroup = prj.CodeQueries.CodeQueriesSet.ChildGroups.Single(x => x.Name.Contains("JustMyCode"));
        var originalQuery = justMyCodeGroup.ChildQueries
            .Single(x => x.QueryString.Contains("Discard generated Types from JustMyCode"));
        var changedQuery = originalQuery.Controller.CreateQuery(originalQuery.IsActive,
            query,
            originalQuery.
                DisplayStatInReport,
            originalQuery.DisplayListInReport,
            originalQuery.DisplaySelectionViewInReport,
            originalQuery.IsCriticalRule);

        var justMyCodeGroupWithModifiedQuery = justMyCodeGroup.ReplaceQuery(originalQuery, changedQuery);

        var newQueries = new List<IQuery>();
        foreach (var q in justMyCodeGroup.ChildQueries)
        {
            if (q.QueryString.Contains("Discard generated Types from JustMyCode"))
            {
                continue;
            }

            newQueries.Add(prj.CodeQueries.CodeQueriesSet.Controller.CreateQuery(q.IsActive, q.QueryString,
                q.DisplayStatInReport, q.DisplayListInReport, q.DisplaySelectionViewInReport, q.IsCriticalRule));
        }
        newQueries.Add(prj.CodeQueries.CodeQueriesSet.Controller.CreateQuery(originalQuery.IsActive, query, originalQuery.DisplayStatInReport, originalQuery.DisplayListInReport, originalQuery.DisplaySelectionViewInReport, originalQuery.IsCriticalRule));

        var newGroup = prj.CodeQueries.CodeQueriesSet.Controller.CreateGroup(justMyCodeGroup.Name,
            justMyCodeGroup.IsActive, justMyCodeGroup.ShownInReport, newQueries, new List<IGroup>());

        prj.CodeQueries.CodeQueriesSet.RemoveGroup(justMyCodeGroup);
        prj.CodeQueries.CodeQueriesSet.AddGroup(newGroup);

现在,RemoveGroup抛出异常:

这组组不包含groupToRemove。

更新2:我还想知道,为什么这段代码会返回false?

代码语言:javascript
复制
 var justMyCodeGroup = prj.CodeQueries.CodeQueriesSet.ChildGroups.Single(x => x.Name.Contains("JustMyCode"));
 prj.CodeQueries.CodeQueriesSet.ContainsGroup(justMyCodeGroup)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 13:59:02

请参阅PowerTools源文件:

代码语言:javascript
复制
$NDependInstallDir$\NDepend.PowerTools.SourceCode\CQL2CQLinq\CQL2CQLinqPowerTool.cs

此PowerTools将用旧CQL语法编写的代码查询转换为使用新CQLinq语法编写的代码查询,因此它从项目加载查询集,更新CQL查询,然后保存项目中的新查询集。

queriesController是这样聚集的..。

代码语言:javascript
复制
     var queriesSet = project.CodeQueries.CodeQueriesSet;
     var queriesController = queriesSet.Controller;

..。然后使用这种方式修改查询集:

代码语言:javascript
复制
queriesController.DoUpdateQueryObject(query, newQuery);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26907276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档