2013-12-11 2 views
2

: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 [@]와 일치하지 않습니다. 키 = 'MyUnknownVariable'] [C : \ MyApp를 \ 개발 운영 팀 \ ConfigBundle.msbuild]

우리는이에 대한 경고를 얻을이 좋은이지만

, 난 정말이의 일부가 될 것이기 때문에 오류가 수 있도록이 필요 우리의 자동화 된 빌드 및 배포 프로세스는 응용 프로그램이 작동을 멈출 때까지 아무도 발견하지 않을 것입니다.

나는이 경고를 오류로 취급하고 싶습니다. 내가 인터넷에서 본 몇 가지를 바탕으로, 나는 두 개의 서로 다른 TreatWarningsAsErrors 기호와 PropertyGroup을 시도했다 : 나는 의심 명령 줄 (에이 설정을 시도했습니다

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

은 동일 이상) :

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

위의 작업은 아무 것도 없습니다. 경고가 계속 전송됩니다. 이를 바탕으로 TreatWarningsAsErrors 지시문을 존중하는 것이 개별 MSBuild 작업에 미치지 만 TransformXml은 그렇지 않습니다.

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

그것은 정확히 완벽 하진하지만 확실히 성공적으로 마무리에서 빌드를 중지 할 것 :

내가 마지막 작업이 내가 좋아하는 뭔가를 할 수 예를 들어 경고를 던졌다 경우 배울 수있는 방법을 찾을 수 있다면

. 다행히 누군가가 이것에 대한 도움이 될 제안을 할 것입니다.

+0

TransformXml 작업을 만들고 실행하는 래퍼 사용자 지정 MSBuild 작업을 만들 수 있으며 경고가 기록되면 오류로 다시 기록 할 수 있습니다. 또한 TransformXml 클래스를 디 컴파일하여 경고를 오류로 처리하는 방법이 있는지 확인하는 데 도움이 될 수 있습니다 (특히 ToolTask에서 파생 된 경우). – makhdumi

+0

그래, 그게 내가 끝내었던 접근법이야. Powershell 스크립트로 감쌌다. 당신의 방법은 분명히 "깨끗한"것이고, 이후 버전의 배포 스크립트에서는이를 잘 구현할 것입니다. –

답변

4

TreatWarningsAsErrors

경고를 오류로 처리하는 코드 분석을 지시하는 데 사용되는 오류로

CodeAnalysisTreatWarningsAsErrors

을 경고를 치료하기 위해 다른 언어 컴파일러를 지시하는 데 사용됩니다 .

모든 MsBuild 경고를 오류로 처리하는 일반적인 스위치는 없습니다. 일반적으로 MsBuild의 호출자는 경고가 발생했음을 감지하기 위해 MsBuild에 로거를 전달합니다. 이는 Team Build가 예를 들어 수행하는 작업입니다. 그런 다음 호출 도구는 전체 빌드 결과를 통과하거나 실패 할 수 있습니다.

+0

그래, 내가 그렇게해야 할 것 같아. 난 Powershell로 빌드 작업에 대한 호출을 감쌌다. 토큰을 볼 때마다 예외를 던진다.': warning :'- 지금까지 꽤 잘 작동하는 것처럼 보인다. 거의 이상적이지만 아무것도없는 것보다 낫습니다. –