Как исключить ссылки на службы из охвата кода с помощью файла runsettings в Visual Studio 2012?

Я использую специальный файл runsettings для контроля того, какие проекты проверяются для покрытия кода. Я использовал шаблон по умолчанию, предоставленный Microsoft, и до сих пор смог исключить элементы, которые я хочу, без проблем. Следующее действие - исключить из охвата кода автогенерируемые классы веб-прокси, созданные Visual Studio при добавлении ссылки на службу.

Казалось бы, что-то, что должно работать с шаблоном шаблонов стандартных по умолчанию, поскольку в нем есть раздел, который выглядит так:

<attributes>
 <exclude>
 <!-- Don’t forget "Attribute" at the end of the name -->
 <attribute>^System.Diagnostics.DebuggerHiddenAttribute$</attribute>
 <attribute>^System.Diagnostics.DebuggerNonUserCodeAttribute$</attribute>
 <attribute>^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</attribute>
 <attribute>^System.CodeDom.Compiler.GeneratedCodeAttribute$</attribute>
 <attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</attribute>
 </exclude>
</attributes>

Все классы, созданные при добавлении ссылки на службу, украшаются GeneratedCodeAttribute, поэтому все они должны быть исключены. Тем не менее, когда я запускаю покрытие кода, они не игнорируются, поэтому заголовок покрытия кода содержит большой блок незакрытого кода. Я экспериментировал с регулярным выражением несколько раз, пытаясь заставить его правильно выбрать атрибут безрезультатно.

Буду признателен за предложения о том, как: - получить исключение этого атрибута для работы - альтернатива, которая не требует от меня исключить весь проект или делает файл runsettings неэквивалентным (мы хотим повторно использовать этот базовый файл для всех проектов без особых изменений)

FYI - хотя я понимаю, что есть другие инструменты для покрытия кода, моя цель состоит в том, чтобы заставить Visual Studio работать, поэтому предложения о переключении на другой инструмент мне не помогают в этом случае.

4 ответа

В MSDN есть страница, в которой описывается, как настроить анализ покрытия кода здесь.

В нижней части страницы есть пример файла настроек, который показывает, как исключать атрибуты, и это соответствует тому, что у вас есть выше.

Вы можете попробовать некоторые другие методы исключения, которые они упоминают, например, исключая путь:

<!-- Match the path of the source files in which each method is defined: -->
<sources>
 <exclude>
 .*\\atlmfc\\.*
 .*\\vctools\\.*
 .*\\public\\sdk\\.*
 .*\\microsoft sdks\\.*
 .*\\vc\\include\\.*
 </exclude>
</sources>


Спасибо за идею. Я добавил эти строки:

.*\\Service References\\.*
.*\\*.designer.cs*

и получил нужные мне результаты. Я все еще не понимаю, что я не знаю, почему другие части этого файла не принимаются.


Похоже, что проблема заключается в периодах в RegEx. Если вы избежите их как \., он начнет работать. Не уверен, почему это имеет значение, если это действительно RegEx, период должен соответствовать любому символу, включая период.

Итак, чтобы исходный шаблон работал, вы должны изменить его на следующее:

<attributes>
 <exclude>
 <attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</attribute>
 <attribute>^System\.Diagnostics\.DebuggerNonUserCodeAttribute$</attribute>
 <attribute>^System\.Runtime\.CompilerServices\.CompilerGeneratedAttribute$</attribute>
 <attribute>^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$</attribute>
 <attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</attribute>
 </exclude>
</attributes>

Также, чтобы сообщить вам, фильтры имеют ту же проблему, с которой вы могли бы воспользоваться:

<modulepaths>
 <include>
 <modulepath>.*MyCompany\.Namespace\.Project\.dll$</modulepath>
 </include>
 <exclude>
 <modulepath>.*ThirdParty\.Namespace\.Project\.dll$</modulepath>
 </exclude>
</modulepaths>


Мне удалось настроить этот параметр, установив для атрибута присвоение имен:

<attributes>
 <exclude>
 <attribute>.*GeneratedCodeAttribute$</attribute>
 </exclude>
</attributes>

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

licensed under cc by-sa 3.0 with attribution.