Robocopy成功时输出1,与大多数程序成功时退出0不同。 Visual Studio(和MSBUILD)将退出代码1解释为错误。
Robocopy如何在Visual Studio的构建后和构建前事件中使用,以使构建环境正确识别其失败和成功?
注意:这或多或少是this post的转发。
最佳答案
MSBuild extensionpack包含您可以在构建过程中使用的Robocopy任务。
这可以代替VS生成前/生成后事件为您提供解决方案吗?
如果是这样,可以通过覆盖BeforeBuild,AfterBuild目标并调用Robocopy任务来extend the Visual Studio Build Process(如果它们更适合您的需求,您也可以覆盖其他目标,请参见链接的MSDN页面中的列表)
因此,实际上,您应该下载并安装MSBuild extensionpack,而不是打开项目的csproj / vbproj文件并编辑以下方式:
添加以下条目以导入MSBuild extensionpack的Robocopy任务
<PropertyGroup>
<TPath>$(MSBuildExtensionsPath32)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
</PropertyGroup>
<Import Project="$(TPath)"/>
覆盖BeforeBuild,AfterBuild并执行Robocopy任务
<Target Name="BeforeBuild">
<Message Text="Beforebuild" />
<MSBuild.ExtensionPack.FileSystem.RoboCopy Source="C:\temp\robo_src1" Destination="C:\temp\robo_dest1" Files="*.*" Options="/MIR">
<Output TaskParameter="ExitCode" PropertyName="Exit" />
<Output TaskParameter="ReturnCode" PropertyName="Return" />
</MSBuild.ExtensionPack.FileSystem.RoboCopy>
<Message Text="ExitCode = $(Exit)"/>
<Message Text="ReturnCode = $(Return)"/>
</Target>
<Target Name="AfterBuild">
<MSBuild.ExtensionPack.FileSystem.RoboCopy Source="C:\temp\robo_src2" Destination="C:\temp\robo_dest2" Files="*.*" Options="/MIR">
<Output TaskParameter="ExitCode" PropertyName="Exit" />
<Output TaskParameter="ReturnCode" PropertyName="Return" />
</MSBuild.ExtensionPack.FileSystem.RoboCopy>
<Message Text="ExitCode = $(Exit)"/>
<Message Text="ReturnCode = $(Return)"/>
</Target>
关于visual-studio-2010 - 将robocopy与Visual Studio 2010生成后和生成前事件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470828/