TreatWarningsAsErrors vs / warnaserror - PullRequest
       77

TreatWarningsAsErrors vs / warnaserror

0 голосов
/ 19 февраля 2019
class Program
{
    static void Main(string[] args)
    {
        int unused = 3;
    }
}

Если я добавлю:

<TreatWarningsAsErrors>false</TreatWarningsAsErrors>

в файл * .csproj, то каждый раз, когда я пытаюсь скомпилировать эту программу, сборка завершается неудачей, поскольку предупреждение о неиспользованной переменной приводит к ошибке.Это то же самое, что и для параметра «Обрабатывать предупреждения как ошибки» в «Проект> Свойства» значение «Все» в Visual Studio IDE.

Вместо этого, если я компилирую как:

msbuild /warnaserror

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

Есть ли разница в аргументах командной строки msbuild и свойствах msbuild, которые я не понимаю?

Кроме того, я предполагаю, что аргументы командной строки msbuild не просто передаются в csc.exe, потому что если я это сделаю:

csc.exe -warnaserror Program.cs

Не выполняется исполняемый файл и сборка всегда завершается неудачей.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы правы, аргументы командной строки msbuild не просто передаются в csc.exe, особенно для /warnaserror.

Несмотря на то, что не найден действительный документ, который описывает отношения между/warnaserror в msbuild и в css.Есть что-то различие между warnaserror в опциях msbuild и в опциях csc.

В msbuild: Описание этого: Когда предупреждение рассматривается как ошибка, цель будет продолжать выполняться, как если бы это было предупреждениено общая сборка не удастся.(Мы можем увидеть это по msbuild /help).

Но в C # compile (csc): примечание таково: любые сообщения, которые обычно сообщаются как предупреждения, вместо этого сообщаются как ошибки,и процесс сборки останавливается (выходные файлы не создаются).

Когда мы собираем проект в первый раз, если мы используем msbuild / warnaserror.Ошибка будет распознана и отображена в «CoreCompile» Target, а скриншот будет следующим: enter image description here Да, сборка не удалась.Но, как упоминалось выше, цель будет продолжать выполняться, когда using /warnaserror in msbuild, что привело к выводу файла .exe в папку obj, а затем в папку bin.

Но для /p:TreatWarningsAsErros=true, если мы используем его для сборки в первый раз.Сборка завершится неудачно, как при использовании / warnaserror в msbuild, но difference is the message should be /target:exe /warnaserror+ /utf8output instead of /target:exe /utf8output.

Это означает, что когда using /warnaserror in msbuild, он не работает как /warnaserror in CSC.Вместо этого /p:TreatWarningsAsErros=true seems to work as calling the /warnaserror in CSC.

И я думаю, что это разница между [/ warnaserror в msbuild] и [/ p: TreatWarningsAsErros = true и csc -warnaserror].Надеюсь, это поможет решить ваш вопрос.

Кроме того: Если вы хотите рассматривать предупреждения как ошибки и не хотите выводить их.Я предлагаю вам использовать / p: TreatWarningsAsErrors = true.И если по какой-то особой причине вам нужен вывод при обработке предупреждений как ошибок, вы можете выбрать /warnaserror.

Ожидая вашего ответа.

...