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

Игнорирование сгенерированных файлов при использовании "Обработать предупреждения как ошибки"

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

'Обработать все предупреждения как ошибки "

Мы не можем сделать это в данный момент, потому что сгенерированные файлы (в частности файлы reference.cs) пропускают такие вещи, как комментарии XML, и это порождает предупреждение, мы не хотим полностью исключать предупреждения комментариев xml из всех файлов только для определенных типов файлов (сгенерированный код).

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

Есть ли у кого-нибудь какие-либо идеи, в настоящее время у меня есть более 2-х предупреждений (его большой проект): (

4b9b3361

Ответ 1

Я написал PowerShell script, который вызывает svcutil, а затем обертывает автоматически сгенерированный код с помощью директив #pragma, чтобы игнорировать отсутствующий xml, но все же позволяет мне восстанавливать по мере необходимости.

$outFile = 'generatedCode_fromSVCUTIL.cs'
svcutil '..\XML Schema\myXsd.xsd' /dataContractOnly /n:'*,MyNamespace.GeneratedCode' /language:C#  /importxmltypes /out:$outFile

# ----------------------------------------------------- 
# Exempt this file from XML documentation requirements

Write-Host 'Wrapping ', $outFile, ' in #pragma 1591 flags' 
$a = Get-Content $outFile 

# Set up pragma lines for enabling and disabling the XML doc warning
$disableWarning = '#pragma warning disable 1591'
$restoreWarning = '#pragma warning restore 1591'

# wrap the generated code in the pragma tags
Set-Content $outFile –value $disableWarning, $a, $restoreWarning 
Write-Host 'Done.' 

Ответ 2

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

// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )

Если вы можете генерировать такие предупреждения (или #include) в сгенерированных файлах кода, все готово.

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

/wd4326 disables compiler warning C4326.

Затем снова включите их (через файл заголовка) в файлы, для которых вы хотите:

// Report warning 4326 as an error.
#pragma warning( error : 326 )

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

Изменить. Я вижу, что ваши исходные файлы - это С#, а не С++.

Использование командной строки С#:

to suppress CS0028, you could specify /nowarn:28.

К сожалению, /warnaserror выполняет все предупреждения.

Ответ 3

В VS 2010 вы можете щелкнуть правой кнопкой мыши ссылку на службу, выбрать "Настроить ссылку на службу..." и изменить модификатор доступа из общего в Internal.
Это, конечно, не подходит для вашего конкретного решения, но предупреждения не применимы к внутренним методам, и вы все еще можете сгенерировать справочную службу.

Ответ 4

Для С# вы можете просто разместить

#pragma warning disable 1591

в начале файла reference.cs. Тогда предупреждение о недостающей документации XML не будет выдано.

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

Ответ 5

Несколько мыслей.

1) У вас есть автогенерированный тег в заголовке файла (комментарии в верхней части файла), например:

// <auto-generated>

// This file is auto-generated...

// </auto-generated>

Этот тег важен (содержимое отсутствует), так как некоторые инструменты пропускают такие файлы (например, StyleCop может быть настроен на игнорирование этих файлов).

2) Если вы являетесь автогенерирующим кодом, почему бы не автогенерировать хотя бы некоторые комментарии XML? Я могу понять, что вы не хотите тратить много времени на документирование кода, который, вероятно, никогда не будет прочитан, но при отладке кода я часто нахожусь в каком-то автогенерированном прокси, и даже простой комментарий может оказаться полезным даже если он просто говорит "автогенерированный код":)

Edit

3) Вы также можете подавлять предупреждения, добавляя прагмы к вариантам сборки (щелкните правой кнопкой мыши по проекту, выберите свойства, перейдите на вкладку "Создание" ). Это более удобно, чем добавление кода. Попробуйте добавить 1591;1574;1587 в поле "Подавить предупреждения".

4) Вы можете зайти на вкладку "Анализ кода" в "Свойства проекта" и снять флажок "Лечить предупреждение как ошибку" для конкретных предупреждений, которые вызывают проблемы.

Очевидно, что оба эти параметра являются глобальными, они не просто выбирают файлы с автогенерированием.