подавить предупреждение для сгенерированного кода C # - PullRequest
20 голосов
/ 24 апреля 2010

Я включил «Обрабатывать предупреждения как ошибки» для моего проекта VS, что означает, что я получаю ошибки за отсутствующую документацию (хорошее напоминание для этого конкретного проекта).

Однако часть кода генерируется специальным инструментом, который не вставляет XML-документацию, поэтому я стараюсь игнорировать отсутствующую XML-документацию только для сгенерированного кода, а не для всего проекта. Я не имею никакого влияния на фактический сгенерированный файл и не могу реально вставить что-либо в файл (так как он часто регенерируется инструментом), поэтому я ищу что-то существующее вне сгенерированного файла (сгенерированные классы являются частичными, если это помогает)

Ответы [ 3 ]

9 голосов
/ 24 апреля 2010

РЕДАКТИРОВАТЬ: см. Комментарии, указывающие, что это не не работает с C # 4. Я не ясно, работал ли он в более ранних версиях компилятора. Спецификация C # 4 делает это довольно ясно, хотя. Раздел 2.5.8.1 гласит:

Директива

A #pragma warning restore восстанавливает весь или заданный набор предупреждений до состояния, которое было в начале модуля компиляции. Обратите внимание, что если конкретное предупреждение было отключено извне, #pragma warning restore (для всех или для указанного предупреждения) не включит это предупреждение повторно.

У Джеффа есть обходной путь в сообщении в блоге - в основном для повторной обработки автоматически сгенерированного кода как части сборки.


Как говорит Том, вы можете добавить «игнорирование» ко всему проекту (Build / Suppress Warnings - введите 1591 в качестве номера предупреждения) - но тогда вы можете восстановить предупреждение самостоятельно в верхней части каждый из ваших не сгенерированных файлов:

#pragma warning restore 1591

Это довольно уродливо, но работает (я только что проверил).

9 голосов
/ 24 апреля 2010

Лучший способ избежать появления предупреждений или ошибок анализа кода в сгенерированном коде - это украсить сгенерированные классы с помощью GeneratedCodeAttribute и сделать так, чтобы файл кода заканчивался на *. Generate.cs шаблон.

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

//----------------------
// <auto-generated>
//     Tool description
// </auto-generated>
//----------------------

Это не обязательно, но если у вас есть заголовок файла кода, это хорошая практика.

Таким образом, FxCop и другие инструменты, такие как StyleCop, больше не будут анализировать ваш код.

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


EDIT: Являются ли сгенерированные классы частичными классами и часто ли меняются фактическое имя и номер класса? Потому что, если сгенерированный контент кода не сильно перемещается, вы можете просто создать другой файл кода и просто объявить сгенерированный частичный класс, чтобы украсить их с помощью GeneratedCodeAttribute. Однажды это спасло мне жизнь (и мое время!).

2 голосов
/ 24 апреля 2010

Лучшее, что вы сможете сделать в этом, - это подавить особое предупреждение в проекте, который содержит сгенерированный код. Вы можете сделать это в свойствах проекта на вкладке Build. Это не идеально, но если не добавлять прагмы в сгенерированный код, это лучшее, что вы можете сделать.

...