Есть ли способ заставить анализ кода игнорировать InternalsVisibleTo?

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

Это работает нормально, но проблема в том, что как только вы используете InternalsVisibleTo, он предотвращает предупреждение CA1812 анализа кода (Избегайте неустановленных внутренних классов).

Это также предотвращает CA1811: «Избегайте невызванного частного кода».

Я провел небольшое расследование и нашел довольно много неиспользуемых внутренних классов, о которых нас не предупреждали из-за этого.

На данный момент мое решение состоит в том, чтобы вручную отредактировать файл «AssemblyInfo.cs» в каждой сборке, чтобы временно закомментировать InternalsVisibleTo, чтобы я мог скомпилировать только этот проект и обнаружить неиспользуемые внутренние классы.

Это огромная проблема, и, конечно, если что-то подобное не выполняется автоматически, зачастую это не выполняется вообще.

Решением было бы указать Анализ кода игнорировать атрибут InternalsVisibleTo.

Кто-нибудь знает, существует ли такая возможность?


person Matthew Watson    schedule 16.10.2013    source источник
comment
Не обращайте внимания на мой комментарий. Думаю, я неправильно понял твой вопрос.   -  person hawkke    schedule 16.10.2013
comment
В статье MSDN для CA1812 это конкретно упоминается. И предлагает обходной путь, вместо этого используйте FxCop.   -  person Hans Passant    schedule 16.10.2013
comment
@HansPassant Спасибо, но, к сожалению, использование FxCop будет слишком серьезным изменением. У нас есть 530 сборок, которые мне пришлось бы изменить, чтобы использовать FxCop. :(   -  person Matthew Watson    schedule 16.10.2013
comment
Хм, нет, менять сборки смысла нет. Создание проекта FxCop не займет у вас больше минуты, просто Shift + щелчок по сборкам. Не похоже, чтобы вы приложили какие-то реальные усилия.   -  person Hans Passant    schedule 16.10.2013
comment
(Я также добавил It also prevents CA1811: "Avoid uncalled private code". к своему вопросу)   -  person Matthew Watson    schedule 16.10.2013
comment
@HansPassant Интегрируется ли FxCop с вкладкой «Анализ кода» в настройках проекта? (Я обнаружил, что он может использовать те же наборы правил, так что с этой частью все в порядке) Если так, то его можно будет использовать, но в остальном это будет серьезной проблемой. Также просто щелкните сборки, удерживая Shift, не так просто, как вы думаете - они разбросаны по ~ 300 решениям!   -  person Matthew Watson    schedule 16.10.2013
comment
Да, я посмотрел еще раз, и похоже, что для FxCop не существует политики возврата по умолчанию, как для встроенного анализа кода. У нас включена эта политика регистрации для нашей системы управления версиями TFS, поэтому использование FxCop выглядит довольно большим изменением. (Я полагаю, что есть способ сделать это, но мне придется провести еще немного исследований)   -  person Matthew Watson    schedule 16.10.2013
comment
@HansPassant Не могли бы вы рассказать немного о том, как использовать внешний FxCop подобным образом, или указать ссылку, которая объясняет это? У меня здесь точная ситуация, и если бы я мог хотя бы использовать внешний инструмент на машине сборки, я бы смог уловить эти предупреждения. На данный момент мы используем `Включить анализ кода при сборке для каждого проекта в конфигурации Release.   -  person julealgon    schedule 28.03.2015
comment
@HansPassant Я даже не понимаю, о чем вы здесь говорите: Creating the FxCop project ... Я никогда раньше не слышал о «проекте FxCop».   -  person julealgon    schedule 28.03.2015


Ответы (1)


Попробуй это:

#ifdef CODE_ANALYSIS
#else
[InternalsVisibleTo(...)]
#endif
person Kris Vandermotten    schedule 16.10.2013
comment
Увы, это не помогает - проект модульного тестирования не будет построен без InternalsVisibleTo. - person Matthew Watson; 16.10.2013
comment
Это, очевидно, правда, но не нужно создавать проект модульного теста, чтобы вы могли запускать анализ кода в своей библиотеке, не так ли? - person Kris Vandermotten; 16.10.2013
comment
Теперь я понимаю. Вероятно, у вас включен параметр «Включить анализ кода при сборке», верно? Можете ли вы выключить его и запустить анализ кода вручную? Обратите внимание, что это в любом случае хорошая идея, поскольку атрибут для подавления предупреждений анализа кода также зависит от этой константы. - person Kris Vandermotten; 16.10.2013
comment
У нас есть политика регистрации, которая требует, чтобы анализ кода был включен, поэтому мы не можем его отключить. Однако я мог бы создать конфигурацию сборки, которая устанавливает другой #define, который я использую для управления им, поэтому я мог просто выбрать подходящую конфигурацию для запуска анализа кода без InternalsVisibleTo без необходимости редактировать код. Я думаю, что это было бы хорошим решением, поэтому я отмечу это как ответ. - person Matthew Watson; 16.10.2013