【问题标题】:nDepend - how to modify "JustMyCode" queries using nDepend API?nDepend - 如何使用 nDepend API 修改“JustMyCode”查询?
【发布时间】:2014-11-13 10:57:13
【问题描述】:

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

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: 我也试过代码:

       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 ?

 var justMyCodeGroup = prj.CodeQueries.CodeQueriesSet.ChildGroups.Single(x => x.Name.Contains("JustMyCode"));
 prj.CodeQueries.CodeQueriesSet.ContainsGroup(justMyCodeGroup)

【问题讨论】:

    标签: ndepend


    【解决方案1】:

    参考 PowerTools 源文件:

    $NDependInstallDir$\NDepend.PowerTools.SourceCode\CQL2CQLinq\CQL2CQLinqPowerTool.cs
    

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

    queriesController 是这样收集的...

         var queriesSet = project.CodeQueries.CodeQueriesSet;
         var queriesController = queriesSet.Controller;
    

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

    queriesController.DoUpdateQueryObject(query, newQuery);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2010-10-07
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多