Почему все события до или после сборки в 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.

Кто-нибудь знает, что я делаю не так?

enter image description here

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 в противном случае он не думает, что он закончил правильно