После построения завершился с кодом 1



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



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


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



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

2243   17  

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 установите его, чтобы наблюдать за Луной.DbVerse (в поле путь) посмотрите на результат операции. Оттуда должно быть очевидно, что пошло не так

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

для тех, кто пользуется 'скопировать на События Построения (Командная строка события предварительной сборки и командная строка события после сборки) от -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%%

хорошо, это проблема со многими решениями, поэтому я просто публикую свои, чтобы дать людям больше подсказок. Моя ситуация заключается в том, чтобы дважды проверить папки на вашем пути и убедиться, что все они существуют на вашем компьютере. Например: "$(имя_проекта)\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, созданные сборкой в другом месте.

это не удалось с этой ошибкой, когда я сделал Перестроить:

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>

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

Comments

    Ничего не найдено.