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

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

copy $(ProjectDir)DbVerseLunaverse.DbVerse.*.exe  $(TargetDir)

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

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

17 ответов


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


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

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

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

для этого:

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

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


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


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

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


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


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


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


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


у меня была аналогичная проблема, но конкретно в среде сборки Дженкинса. Чтобы устранить проблему, я переключился с использования команды копирования в событии post build на использование целевого объекта копирования.

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

   <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]>

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


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


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

c:\projects\%NotAnEnvironmentVariable%

должно быть

c:\projects\%%NotAnEnvironmentVariable%%

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


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


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

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


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


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

в моем случае у меня был проект 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>

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