2015-07-07 4 views
1

У меня есть задача, которая всегда будет терпеть неудачу при первом вызове, потому что отсутствует файл, но у меня есть OnError Задача, которая создает файл и возобновляет другие задачи, но сборка всегда терпит неудачу, поскольку ее в состоянии ошибки. В любом случае, чтобы сбросить это состояние ошибки в OnError Target?Ошибка ошибки сброса MSBuild

MSDN гласит следующее:

MSBuild выполняет элемент OnError, если одна из задач Target элемента завершается с ContinueOnError набор атрибутов для ErrorAndStop (или ложной)

Это, как говорится, I Я не в состоянии выполнить свою задачу, если я установил ContinueOnError к WarnAndContinue (или истинный)

Вот мой код:

<PropertyGroup> 
    <AppVersion>0.0.0</AppVersion> 
    <ChangelogFileName>Changelog_$(AppVersion).html</ChangelogFileName> 
    <AppCastLocation>http://test/AppCast.xml</AppCastLocation> 
</PropertyGroup> 

<!-- AppCastCreation target is the starting point, it attempts to download 
    the AppCast.xml (Target=AppCastDownload), if it fails then we create 
    a new AppCast.xml (Target=AppCastNew) and then update the AppCast with 
    the new version bneing deployed (Target=AppCastUpdate) --> 
<Target Name="AppCastCreation"> 
    <CallTarget Targets="AppCastDownload;AppCastUpdate" RunEachTargetSeparately="True" /> 
</Target> 

<Target Name="AppCastDownload"> 
    <!-- Download latest AppCast.xml if it doesn't exist, then create a new one --> 
    <WebDownload FileUri="$(AppCastLocation)" FileName="AppCast.xml" /> 
    <OnError ExecuteTargets="AppCastNew"/> 
</Target> 

<Target Name="AppCastNew"> 
    <!-- Create a new AppCast.xml --> 
    <Message Text="Creating new AppCast.xml" /> 
    <Exec Command='python $(AppCastPublisherPath)AppCastPublisher.py new AppCast.xml "Changelog" "$(AppCastLocation)"'/> 
    <OnError ExecuteTargets="MessageErrorHandler"/> 
</Target> 

<Target Name="AppCastUpdate" DependsOnTargets="AppCastDownload"> 
    <Message Text="Updating AppCast.xml with Version $(AppVersion)" /> 
    <!-- Create changeset info and upload --> 
    <Exec Command="python GetJenkinsChangeset.py -html -out $(ChangelogFileName)" /> 
    <OnError ExecuteTargets="MessageErrorHandler"/> 
</Target> 

Так есть в любом случае я могу сбросить состояние ошибки в my AppCastNew Целевой или потенциально другой рабочий процесс, который будет выполнять тот же результат?

+0

Ты неправильно с помощью задачи OnError. Не можете ли вы просто проверить файл перед его доступом? Это было бы гораздо более чистое решение. –

+1

@ D.R. Как используется _OnError_? Было бы лучше, если бы я проверял, существует ли файл заранее, но как это можно достичь с помощью URL-адреса? – AhmedBM

ответ

0

Вместо того, чтобы использовать <OnError..., вы можете присвоить ContinueOnError значение "WarnAndContinue", а затем использовать условие для проверки свойства $(MSBuildLastTaskResult).

Старый:

<WebDownload FileUri="$(AppCastLocation)" FileName="AppCast.xml" /> 
<OnError ExecuteTargets="AppCastNew"/> 

Новое:

<WebDownload ContinueOnError="WarnAndContinue" FileUri="$(AppCastLocation)" FileName="AppCast.xml" /> 
<CallTarget Condition=" '$(MSBuildLastTaskResult)' == 'False' " Targets="AppCastNew"/> 

(я полагаю, что оба "WarnAndContinue" и $(MSBuildLastTaskResult) были введены в MSBuild 4.0.)

Смежные вопросы