我的目标是将.exe文件从解决方案A的bin文件夹复制到解决方案A的post build事件上的另一个解决方案B资源文件夹。
我创建了必要的xcopy命令并在powershell中进行了尝试:它完美无缺
每当我向VS中的操作添加任何命令时,都会失败:"#command#exited with code 1",其中#command#例如是xcopy命令。
我尝试以管理员身份运行VS,目前我尝试运行一个包含" @echo off @exit 0"的.bat文件。这也导致"#命令#退出代码1"。
举一些我作为VS post / pre-build命令尝试的例子:
打电话" projdir \ test.bat"
打电话给projdir \ test.bat
" PROJDIR \ test.bat的"
projdir \ test.bat
...我试过projdir作为" $(ProjectPath)"和手动路径。
我把输出放到verbose并找到以下内容:
命令" C:\ Users \ Traubenfuchs \ AppData \ Local \ Temp"写得不正确或无法找到。 (该文件夹实际存在,但我不知道它想要做什么。)
当我在前/后构建中放置xcopy命令时,会发生同样的事情。
谁知道我做错了什么?
答案 0 :(得分:5)
最近我遇到了类似的问题。
关于你的"你好世界"后期制作活动: 尝试直接调用powershell
powershell -command "write-output 'hello world'; exit 0"
=================
我的预构建活动如下:
powershell -file scriptPath.ps1
我的scriptPath.ps1如下所示:
<my epic powershell code>
...
exit 0
请注意,没有&#34;退出0&#34;最后,我从我的剧本中收到了返回码1。
答案 1 :(得分:5)
由于在域GPO中设置了“软件限制策略”,我们遇到了此问题。似乎pre和post版本在temp文件夹中创建.cmd批处理文件。以下是日志记录显示的内容:
确定了cmd.exe(PID = 8456) C:\ Users \用户布莱恩\应用程序数据\本地的\ Temp \ tmp733425d2c0604973a90a0a175c13353e.exec.cmd 如果不允许使用默认规则,Guid = {11015445-d282-4f86-96a2-9e485f593302}
为了解决这个问题,我们修改了控制SRP的GPO,使其不包含.cmd文件。毕竟,SRP的目标是阻止可执行的恶意软件,而不是批处理文件。因此,我可能会得到一些安全反击。希望有人知道解决这个问题的更好方法。
答案 2 :(得分:2)
一个可能的问题是您必须使用$(ProjectDir)
而不是$(ProjectPath)
当您使用$(ProjectPath)
时,实际上是:"C:\Users\....\Project\MyProject.csproj"
与$(ProjectDir)
对比"C:\Users\....\Project\"
请注意,第一个版本实际上是指向您的项目解决方案文件...这将导致一切失败。
另一个是$(ProjectDir)
自动将尾部斜杠添加到路径中。即"$(ProjectDir)\test.bat"
实际上会转换为:&#34; C:\ Users .... \ Project \ test.bat&#34;
此外,您必须确保将所有文件路径用双引号括起来
所以正确的电话会是这样的:
call "$(ProjectDir)test.bat"
要检查的其他事项是确保脚本正在执行的目录是正确的。见SO:visual studio 2012, postbuild event, bat file not creating new file (not executing)
您是否查看了此StackOverflow中的建议? Post Build exited with code 1
修改
试试这个:
echo Hello World
@exit 0
您需要使用@exit 0
结束任何命令,否则它不会认为它已正确完成