我有一个带有post build事件的项目:
copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe $(TargetDir)
它每次都在我的机器上工作正常.我有一个新的开发人员总是得到"退出代码1"错误.我让她在DOS提示符下运行相同的命令,它工作正常.可能是什么导致了这个?有没有办法解决真正的错误?
我们都使用Visual Studio 2008.
她的路径中的一个文件夹名称中有一个空格,周围没有引号.
带有"Pings"的人帮助了我......但可能会更好一点解释......
对我来说,解决方案是改变:
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
.您会注意到这一点并将其注释掉,而不是悬挂构建.
从 SysInternals 获取进程监视器,将其设置为监视Lunaverse.DbVerse(在Path字段上)查看操作结果.从那里出现什么问题应该很明显
我必须以管理员身份运行VS,才能将我的构建后拷贝到受操作系统保护的"..\Common7\IDE\PrivateAssemblies"工作
针对这一情况,谁使用" 副本在"命令生成事件(预生成事件命令行或/和生成后事件命令行的)项目- >属性:你复制 "命令参数应该像在这里:copy "source of files" "destination for files"
.请记住使用引号(以避免地址字符串中的空格问题).