2014-11-13 3 views
0

Моя цель - изменить запросы «JustMyCode», используя nDepend API. Я использую такой код:nDepend - как изменить запросы «JustMyCode» с помощью nDepend API?

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

Любой Помогите ?

Update 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) 

ответ

0

Обратитесь к 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);