Пост-сборка завершена с кодом 1 - PullRequest
102 голосов
/ 21 ноября 2008

У меня есть проект с событием после сборки:

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)

На моей машине каждый раз работает нормально. У меня есть новый разработчик, который всегда получает ошибку «Exited with code 1». Я заставил ее выполнить ту же команду в командной строке DOS, и она работала нормально. Что может быть причиной этого? Есть ли способ добраться до настоящей ошибки?

Мы оба используем Visual Studio 2008.

Ответы [ 17 ]

110 голосов
/ 22 ноября 2008

У нее было пробел в одном из имен папок в ее пути, и без кавычек вокруг него.

57 голосов
/ 18 февраля 2010

Мне помог один "Пингс" ... но можно объяснить чуть лучше ...

Для меня решение было изменить:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

к этому:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

Надеюсь, это работает для вас. : -)

44 голосов
/ 28 декабря 2010

Моя причина для кода 1 состояла в том, что целевая папка была только для чтения. Надеюсь, это поможет кому-то! У меня было событие после постройки, чтобы сделать копию из одного каталога в другой, и назначение было только для чтения. Поэтому я просто отключил атрибут «только чтение» для каталога и всех его подкаталогов! Просто убедитесь, что это безопасный каталог!

41 голосов
/ 04 мая 2012

Я добавил это для будущих посетителей, так как это довольно активный вопрос.

ROBOCOPY выходит с «кодами успеха», которые не достигают 8. См .: http://support.microsoft.com/kb/954404

Это означает, что:

robocopy exit code 0 = no files copied
robocopy exit code 1 = files copied
When the result is 1, this becomes an error exit code in visual studio.

Так что я решил это легко, добавив это в конец командного файла

exit 0

Предложите обрабатывать ошибки ROBOCOPY таким образом

rem each robocopy statement and then underneath have the error check.
if %ERRORLEVEL% GEQ 8 goto failed

rem end of batch file
GOTO success

:failed
rem do not pause as it will pause msbuild.
exit 1

:success
exit 0    

Путаница возникнет, когда файлы не будут скопированы = нет ошибок в VS. Затем, когда есть изменения, файлы копируются, ошибки VS, но все, что хотел разработчик, было сделано.

Дополнительный совет: не используйте паузу в скрипте, так как это станет неопределенной паузой в сборке VS. при разработке сценария используйте что-то вроде timeout 10. Вы заметите это и закомментируете это вместо того, чтобы иметь зависшую сборку.

11 голосов
/ 21 ноября 2008

Получить монитор процесса от SysInternals установите его, чтобы посмотреть, как Lunaverse.DbVerse (в поле Path) просматривает результат операции. Оттуда должно быть очевидно, что пошло не так

7 голосов
/ 01 мая 2012

Мне пришлось запустить VS от имени администратора, чтобы получить копию после сборки в ОС, защищенной ".. \ Common7 \ IDE \ PrivateAssemblies", чтобы работать

5 голосов
/ 27 декабря 2012

Для тех, кто использует команду copy в События сборки ( Командная строка события перед сборкой или / и Событие после сборки командная строка ) из Project -> Properties : параметры вашей команды copy 'должны выглядеть следующим образом: copy "source of files" "destination for files". Не забудьте использовать кавычки (чтобы избежать проблем с пробелами в строках адреса).

3 голосов
/ 19 августа 2014

Мне удалось исправить мой код 1, запустив Visual Studio от имени администратора. Очевидно, у него не было доступа к выполнению команд оболочки без администратора.

3 голосов
/ 31 октября 2016

У меня была похожая проблема, но именно в среде сборки Jenkins. Чтобы решить эту проблему, я перешел от использования команды копирования в событии после сборки к использованию цели копирования.

Я изменил это:

   <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
   </PropertyGroup>

к этому:

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
  </Target>

и теперь работает нормально.

Я получил конкретную ошибку:

(PostBuildEvent target) -> 
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy <http://1.2.3.4/job/BLAHv2/ws/Api/bin/BLAH.Common.xml> <http://1.2.3.4/job/BLAHv2/ws/Api/App_Data/BLAH.Common.xml"> exited with code 1. [<http://1.2.3.4/job/BLAHv2/ws/Api/Api.csproj]>
2 голосов
/ 18 июля 2011

Для меня я должен был убедиться, что программа, в которую я копировал файл, не работала в то время. Там не было никаких ошибок в синтаксисе. Надеюсь, это кому-нибудь поможет.

...