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