Как включить "Обрабатывать предупреждения как ошибки" для моей задачи TransformXml?

Я использую следующий (сильно упрощенный) скрипт MSBuild:

<?xml version="1.0"?>
<Project DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"  />

    <Target Name="Transform">       
        <TransformXml Source="../web.config"
            Transform="Config\Production\webapp.xml"
            Destination="Config\Build\Production\web.config" />
    </Target>
</Project>

Это прекрасно работает для преобразования одного файла конфигурации без необходимости проходить через MSDeploy.

Однако, допустим, в моем Transform я неправильно написал переменную. Я получу предупреждение:

C: \ MyApp \ DevOps \ Config \ Production \ webapp.xml (15,6): предупреждение: ни один элемент в исходном документе не соответствует '/configuration/appSettings/add[@key='MyUnknownVariable']'[C:\MyApp\DevOps\ConfigBundle.msbuild]

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

Я бы хотел, чтобы эти предупреждения воспринимались как ошибки. Основываясь на некоторых вещах, которые я видел в Интернете, я попробовал PropertyGroup с двумя различными символами TreatWarningsAsErrors:

<PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>

Я попытался установить это в командной строке (что, как я подозреваю, совпадает с приведенным выше):

C:\MyApp\DevOps>msbuild /p:TreatWarningsAsErrors="true" ConfigBundle.msbuild

К сожалению, ничего из этого не работает; предупреждение продолжает отправляться. Исходя из этого, я предполагаю, что индивидуальная задача MSBuild зависит от соблюдения директивы TreatWarningsAsErrors, а в этом случае TransformXml - нет.

Если бы я мог найти способ узнать, выдало ли, например, последнее задание предупреждение, я мог бы сделать что-то вроде:

<Message Text="##teamcity[message text='Config Transform Failed!' status='ERROR']" Condition="$WarningOccurred == 'true'" />

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

1 ответ

Решение

TreatWarningsAsErrors

Используется для указания компиляторам на разных языках обрабатывать предупреждения как ошибки

CodeAnalysisTreatWarningsAsErrors

Используется для инструктирования Code Analysis, чтобы обрабатывать предупреждения как ошибки.

Не существует общего переключателя для обработки всех предупреждений MsBuild как ошибок. Обычно вызывающий MsBuild передает MsBuild регистратор, чтобы обнаружить, что произошло предупреждение, это то, что делает, например, Team Build. Тогда вызывающий инструмент может либо пропустить, либо не дать общий результат сборки.

Другие вопросы по тегам