Подтвердить что ты не робот

Подавить предупреждение для сгенерированного кода С#

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

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

4b9b3361

Ответ 1

EDIT: см. комментарии, указывающие, что это не работает с С# 4. Неясно, работает ли это в более ранних версиях компилятора. Однако спецификация С# 4 делает это довольно ясным. В разделе 2.5.8.1 указано:

Директива

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

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


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

#pragma warning restore 1591

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

Ответ 2

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

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

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

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

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

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


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

Ответ 3

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