У меня есть задача, которая всегда будет терпеть неудачу при первом вызове, потому что отсутствует файл, но у меня есть 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 Целевой или потенциально другой рабочий процесс, который будет выполнять тот же результат?
Ты неправильно с помощью задачи OnError. Не можете ли вы просто проверить файл перед его доступом? Это было бы гораздо более чистое решение. –
@ D.R. Как используется _OnError_? Было бы лучше, если бы я проверял, существует ли файл заранее, но как это можно достичь с помощью URL-адреса? – AhmedBM