У меня есть событие после сборки в моем проекте C ++ Visual Studio 2010, который использует команду xcopy
, но когда этот код ошибки возврата xcopy (> 0), все сборки тоже не удалось, и сообщение «сборка не удалась», как я могу повернуть ошибки чувствительности в событиях сборки?
Спасибо!
Вы можете использовать Exec
задачи IgnoreExitCode
:
<Target Name="MyAwesomePostBuildTarget" AfterTargets="Build">
<Exec IgnoreExitCode="true" Command="xcopy etc. etc." />
</Target>
Вы можете переопределить результат отказа (почти) любой пакетной CMD, добавив || exit /b 0
до конца команды. Пример:
del somefile.txt || exit /b 0
Таким образом, пакетные файлы работают немного как C. Вы можете сделать && условно выполнить команду, если предыдущая команда выполнена успешно, и || выполнить команду, когда предыдущая команда не удалась.
exit /b 0
говорит процессору CMD выйти из сценария и установить нулевой уровень ошибки (0). Никогда не забывайте включать ключ / b! Без этого CMD будет выходить из вызывающего сценария, а также из текущего сценария, что редко, если вообще когда-либо, является желаемым поведением.
Я использую этот трюк из IDE Visual Studio, поэтому нет необходимости делать взлом низкоуровневого проекта. И он умещается на одной линии, что тоже удобно из IDE.
Кстати, еще один полезный трюк — заставить команду замолчать:
xcopy srcfile destfile 1>nul 2>nul || exit /b 0
1
это стандартный вывод, и 2
это stderr. Оболочка Windows-программ, как известно, несовместима с тем, какой вывод они могут использовать, поэтому я обычно просто передаю оба или один из них.