Почему все события до или после сборки в Visual Studio завершаются ошибкой с кодом выхода 1?
моя цель-копирование .exe-файл из папки bin решения A в другую папку ресурсов решений B в событии post build решения A.
Я создал необходимую команду xcopy и попробовал ее в powershell: она отлично работает.
Всякий раз, когда я добавляю любую команду к действиям в VS build, происходит сбой: "#command# exited с кодом 1", где #command# - это, например, команда xcopy.
Я попытался запустить VS как администратор, и в настоящее время я попытался просто запустить.bat файл, содержит "@echo off @exit 0". Это тоже приводит к "#command# exited с кодом 1".
Есть пример того, что я пробовал как команда VS post / pre-build:
вызов " projdirtest.летучая мышь"
вызовите projdirtest.летучая мышь!--1-->
"projdir test.летучая мышь"
projdirтест.летучая мышь!--1-->... Я попробовал projdir как "$(ProjectPath) " и ручной путь.
Я поставил вывод на подробный и нашел следующее:
команда "C:UsersTraubenfuchsAppDataLocalTemp" написано неправильно или его не нашли. (Эта папка действительно существует, но я не знаю, что она хочет сделать.)
то же самое происходит, когда я помещаю команду xcopy в сборку pre/post.
Кто-нибудь знает, что я делаю не так?
3 ответов
недавно я встретил аналогичную проблему.
о вашем событии" hello world " после сборки : попробуйте вызвать powershell напрямую
powershell -command "write-output 'hello world'; exit 0"
=================
мое событие предварительной сборки выглядит так:
powershell -file scriptPath.ps1
моя скриптовая дорожка.ps1 выглядит так:
<my epic powershell code>
...
exit 0
обратите внимание, что без "выхода 0" в конце я получил код возврата 1 из моего скрипта.
У нас была эта проблема из-за" политики ограничения программного обеспечения", настроенной в GPO домена. Похоже, что сборки pre и post создают a .командный файл cmd в папке temp. Вот что показал мне журнал:
cmd.exe (PID = 8456) идентифицировано C:\Users\brian\AppData\Local\Temp\tmp733425d2c0604973a90a0a175c13353e.exec.УМК как запрещено с помощью правила по умолчанию, Guid = {11015445-d282-4f86-96a2-9e485f593302}
чтобы исправить это, мы изменили GPO это контролировало SRP, чтобы он не включал .cmd-файлы. В конце концов, цель SRP-блокировать исполняемые вредоносные программы, а не пакетные файлы. Из-за этого у меня могут быть проблемы с безопасностью. Надеюсь, кто-то знает лучший способ решить эту проблему.
одна из возможных проблем заключается в том, что вы должны использовать $(ProjectDir)
вместо $(ProjectPath)
при использовании $(ProjectPath)
это на самом деле: "C:\Users\....\Project\MyProject.csproj"
и $(ProjectDir)
что: "C:\Users\....\Project\"
обратите внимание, что первая версия указывает на ваш файл проектное решение... что приведет к провалу.
другой - это то, что $(ProjectDir)
автоматически добавляет косую черту в пути. т. е. "$(ProjectDir)\test.bat"
в итоге приводит к: "C:\Users....\Проект\Тест.летучая мышь"
также вы должны убедиться, что вы заключаете все пути к файлам в двойные кавычки
поэтому правильный вызов будет выглядеть так:
call "$(ProjectDir)test.bat"
другие вещи, которые нужно проверить, - это убедиться, что каталог, из которого выполняется скрипт, правильный. Смотри так:visual studio 2012, postbuild event, bat-файл не создает новый файл (не выполняется)
вы проверили предложения в этом StackOverflow? Post Build вышел с кодом 1
редактировать
попробуйте это:
echo Hello World
@exit 0
вы должны закончить любые команды с @exit 0
в противном случае он не думает, что он закончил правильно