Post Build退出代码1

Tim*_*ott 104 visual-studio-2008 post-build

我有一个带有post build事件的项目:

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

它每次都在我的机器上工作正常.我有一个新的开发人员总是得到"退出代码1"错误.我让她在DOS提示符下运行相同的命令,它工作正常.可能是什么导致了这个?有没有办法解决真正的错误?

我们都使用Visual Studio 2008.

Tim*_*ott 113

她的路径中的一个文件夹名称中有一个空格,周围没有引号.

  • 在路径名上加上引号是一种很好的做法.不在包含空间的路径中工作是事件更好:-) (12认同)
  • copy/y"$(TargetDir)Dotfuscated \""$(TargetDir)"这个命令对我不起作用,如果我在结束时写出0,那么工作正常.你能告诉我为什么吗? (4认同)

Jan*_*rup 57

带有"Pings"的人帮助了我......但可能会更好一点解释......

对我来说,解决方案是改变:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin
Run Code Online (Sandbox Code Playgroud)

对此:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"
Run Code Online (Sandbox Code Playgroud)

希望对你有效.:-)


小智 46

我对代码1的原因是目标文件夹是只读的.希望这有助于某人!我有一个post build事件来从一个目录复制到另一个目录,目标是只读的.所以我只是去取消选中目录及其所有子目录的只读属性!只要确保它的目录是安全的!


Val*_*mas 43

我已经为未来的访问者添加了这个,因为这是一个非常活跃的问题.

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.
Run Code Online (Sandbox Code Playgroud)

所以我通过将其添加到批处理文件的底部轻松解决了这个问题

exit 0
Run Code Online (Sandbox Code Playgroud)

建议以这种方式处理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    
Run Code Online (Sandbox Code Playgroud)

没有文件被复制时,将设置混淆= VS中没有错误.然后当有变化时,文件会被复制,VS错误,但开发人员想要的一切都已完成.

附加提示:不要在脚本中使用暂停,因为这将成为VS构建中的无限暂停.在开发脚本时,使用类似的东西timeout 10.您会注意到这一点并将其注释掉,而不是悬挂构建.

  • 正是我想要的。谢谢!! (3认同)

Ash*_*her 11

SysInternals 获取进程监视器,将其设置为监视Lunaverse.DbVerse(在Path字段上)查看操作结果.从那里出现什么问题应该很明显


wru*_*kie 7

我必须以管理员身份运行VS,才能将我的构建后拷贝到受操作系统保护的"..\Common7\IDE\PrivateAssemblies"工作


Boh*_*uts 5

针对这一情况,谁使用" 副本在"命令生成事件(预生成事件命令行或/和生成后事件命令行的)项目- >属性:你复制 "命令参数应该像在这里:copy "source of files" "destination for files".请记住使用引号(以避免地址字符串中的空格问题).


Tec*_*Sam 5

我有一个类似的问题,但特别是在 Jenkins 构建环境中。为了解决这个问题,我从在构建后事件中使用复制命令切换到使用复制目标。

我改变了这个:

   <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
   </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

对此:

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

现在它工作正常。

我得到的具体错误是:

(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]>
Run Code Online (Sandbox Code Playgroud)