Post Build вышла с кодом 1

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

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

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

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

Ответ 1

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

Ответ 2

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

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

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

:

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

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

Ответ 3

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

Ответ 4

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

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. Вы заметите это и закомментируете это вместо того, чтобы иметь зависание сборки.

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

У меня была аналогичная проблема, но особенно в среде сборки 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]>

Ответ 9

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

Ответ 10

В качестве хорошей практики я предлагаю заменить событие post build Задача MS File File Copy.

Ответ 11

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

Ответ 12

Я получил такую ​​же ошибку. У меня было% в пути назначения, которое нужно было экранировать

c:\projects\%NotAnEnvironmentVariable%

необходимо

c:\projects\%%NotAnEnvironmentVariable%%

Ответ 13

Хорошо, это проблема со многими решениями, поэтому я просто отправляю сообщение, чтобы дать людям больше намеков. Моя ситуация заключается в том, чтобы дважды проверить папки на вашем пути и убедиться, что все они существуют на вашем компьютере. Например: "$ (SolutionDir)\partBin\Bin\$(ProjectName).pdb", но "Bin" не находится в папке partBin.

Ответ 14

Для тех, кто использует команду "копировать" в событиях сборки (командная строка события "Создать сборку" или/или "Командная строка события после сборки" ) из "Проект" → "Свойства": должна существовать целевая папка

Ответ 15

Так много решений...

В моем случае мне пришлось сохранить файл bat с кодировкой, отличной от юникода (Western, Windows). По умолчанию, когда я добавил файл в visual studio (и, вероятно, должен был сделать это вне VS), он добавил с кодировкой UTF-8.

Ответ 16

У меня была эта же проблема, и оказалось, что это было потому, что я переименовал проект. Я вошел в свойства проекта и изменил имя сборки и корневое пространство имен на название проекта, и после этого он отлично поработает!

Ответ 17

Еще один ответ...

В моем случае у меня был проект Visual Studio 2017, нацеленный как на .Net Standard 1.3, так и .Net Framework 2.0. Это было указано в файле .csproj следующим образом:

<TargetFrameworks>netstandard1.3;net20</TargetFrameworks>

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

copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"

Другими словами, я пытался скопировать .Net Framework.dll, созданную при сборке, в другое место.

Это было с ошибкой, когда я сделал Rebuild:

MSB3073 The command "copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"" exited with code 1.

После большого разочарования я наконец-то определил, что Rebuild удалил все выходные файлы, затем выполнил сборку для .Net Standard 1.3, а затем попытался запустить командную строку события после сборки, что не удалось из-за файла Копирование еще не построено.

Таким образом, решение состояло в том, чтобы изменить порядок сборки, то есть сначала собрать для .Net Framework 2.0, а затем для .Net Standard 1.3.

<TargetFrameworks>net20;netstandard1.3</TargetFrameworks>

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

Ответ 18

В моем случае мне пришлось cd (сменить каталог) перед вызовом файла bat, потому что внутри файла bat была операция копирования, которая указывала относительные пути.

:: Copy file
cd "$(ProjectDir)files\build_scripts\"
call "copy.bat"