Можно ли исключить целые пространства имен из анализа NDepend? - PullRequest
10 голосов
/ 12 сентября 2011

У меня есть установка, в которой Visual Studio 2010 выполняет анализ покрытия тестов, и его выходные данные поглощаются NDepend во время сборки интеграции.

Некоторые сборки содержат сгенерированный код, который должен игнорироваться NDepend.
Есть ли способ сделать это?Желательно все пространство имен.

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011

Запрос кода и управление по LINQ (CQLinq) действительно предоставляет возможность игнорировать сгенерированный код .

Существует удобный предопределенный домен с именем JustMyCode типа ICodeBaseView .

Домен JustMyCode представляет собой средство CQLinqисключить сгенерированные элементы кода из результатов запроса CQLinq.Например, следующий запрос будет соответствовать только крупным методам, которые не генерируются инструментом (например, дизайнером пользовательского интерфейса):

from m in JustMyCode.Methods where m.NbLinesOfCode > 30 select m

Набор сгенерированных элементов кода определяется запросами CQLinq с префиксом ключевого слова CQLinq notmycode .Например, приведенный ниже запрос соответствует методам, определенным в исходных файлах, имя которых заканчивается на ". Designer.cs" :

notmycode from m in Methods where
  m.SourceFileDeclAvailable && 
  m.SourceDecls.First().SourceFile.FileName.ToLower().EndsWith(".designer.cs")
select m

Средство выполнения запросов CQLinq выполняет все notmycode запросы перед запросами, основанные на JustMyCode , следовательно, домен JustMyCode определен раз и навсегда.Очевидно, что компилятор CQLinq выдает ошибку, если запрос notmycode опирается на домен JustMyCode .

Существует 4 запроса notmycode по умолчанию, которые можно легко адаптироватьчтобы соответствовать вашим потребностям.Отмечает, что по умолчанию notmycode запросов для пространств имен нет, но вы можете создать свои собственные:

1 голос
/ 30 сентября 2011

Обнаружено это в «Краткой сводке методов рефакторинга»

// Here are some ways to avoid taking account of generated methods.
!( NameIs "InitializeComponent()" OR
   // NDepend.CQL.GeneratedAttribute is defined in 
   // the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
   // You can define your own attribute to mark "Generated".
   HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute") 

Но это не относится к необходимости изменять каждый запрос CQL, чтобы все они игнорировали сгенерированный код.

...