2010-01-22 4 views
2

나를 예를 봅시다 ...이 유사 보이는 all.proj 있습니다MsBuild - 배치 작업을 격리 할 수 ​​있습니까? 하나의 실패한 작업이 나머지 작업을 건너 뛰지 않습니다.

작업 중 하나는 목표를 종료합니다 실패하면
<ItemGroup> 
    <ProjectsToBuild Include="..\Sites\*\*.csproj" /> 
</ItemGroup> 

<Target Name="DeployWebsites" DependsOnTargets="BuildMergedSolutions"> 
    <AspNetCompiler 
    PhysicalPath="%(ProjectsToBuild.RootDir)%(ProjectsToBuild.Directory)" 
    TargetPath="%(ProjectsToBuild.RootDir)%(ProjectsToBuild.Directory)..\..\..\deploy\%(ProjectsToBuild.Filename)" 
    VirtualPath="/%(ProjectsToBuild.Filename)%(ProjectsToBuild.Extension)" 
    Debug="true" 
    Updateable="true" 
    Force="true" /> 
</Target> 

. 오류를 인쇄하고 나머지 작업을 계속 수행 할 수있는 방법이 있습니까?

ContinueOnError는 오류를 경고로 변환하기 때문에 옵션이 아닙니다. 나는 결국 빌드가 실패하기를 원하지만, 나는 얻을 수있는만큼 많은 오류 정보를 얻길 원한다. 그래서 일부 사이트는 실패하더라도 모든 사이트를 컴파일해야한다.

답변

3

오류를 발견 할 수있는 경우에만이를 수행 할 수 있습니다. 기본적으로 작업은 일부 아티팩트를 작성하거나 실패했는지 여부를 알 수있는 출력 매개 변수를 제시해야합니다. 작업 자체에 대해 ContinueOnError를 true로 설정하면됩니다. ContinueOnError를 true로 설정하면 모든 작업 호출이 완료된 후에 오류가 있는지 확인하고 이에 따라 조치 할 수 있습니다.

MSBuild에서 단위 테스트를 실행하기 위해 비슷한 작업을 수행했습니다. 모든 단위 테스트가 모든 테스트 어셈블리에서 실행되기를 원했지만 완료된 후에는 빌드를 실패하기를 원했습니다. 그래서 내가 한 일은 ContinueOnError를 true로 설정 한 다음 실패한 테스트 케이스에 대해 결과가 기록 된 XML 파일을 검색하고 해당 파일의 메시지도 집계했습니다.

귀하의 경우에는 AspNetCompiler 작업이 그러한 파일을 쓰지 않습니다. AspNetCompiler는 (ToolTaskExtension을 통해) ToolTask을 확장하여 aspnet_compiler.exe 유틸리티를 마무리하므로 ExitCode를 추적 할 수 있습니다. 그 일을 확장하는 자신의 일을 쓰지 않으면 일종의 까다 롭습니다. 대상 일괄 처리를 사용하면 AspNetCompiler 작업을 호출 한 다음 각 ExitCode를 파일에 쓸 수 있습니다. 그런 다음 해당 파일을보고 0이 아닌 종료 코드를 찾습니다. 당신은 AspNetCompiler 작업을 확장하는 자신 만의 커스텀 작업을 작성하는 것을 고려해 볼 수 있습니다.

일괄 처리에 대한 자세한 내용은 http://sedotech.com/Resources#Batching에서 리소스를 참조하십시오.

+0

그래, 내가 생각했던 것. 네이트가이 지역에서 더 잘 지내는지 아십니까? – JohannesH

+0

죄송합니다. Nant에 대해 많이 알지 못합니다. –

+0

AspNetCompiler 작업을 내부적으로 호출하는 자체 작업을 작성했습니다. – JohannesH

관련 문제