我的解决方案有一堆项目,其中一个是Windows服务; 我有一个预建步骤来停止服务和一个postbuild步骤重新启动它(这样,当VS正在构建/覆盖它时,windows service exe不会被锁定).
on pre-build:
net stop myservice
on post-build:
net start myservice
Run Code Online (Sandbox Code Playgroud)
如果在我启动构建时服务未运行,则net stop命令将失败并阻止构建继续进行.
即使预构建步骤失败,我还能做什么来强制构建?
我想在构建过程成功后以给定的文件扩展名递归复制所有文件。
机器人复制
ROBOCOPY %source% %destination% /S *.as?x *.xls? *.mrt
Run Code Online (Sandbox Code Playgroud)
复制
xcopy .\*.as?x %destination% /SY
xcopy .\*.xls? %destination% /SY
xcopy .\*.mrt %destination% /SY
Run Code Online (Sandbox Code Playgroud)
我试图在 Visual Studio 的后期构建部分中插入这两种可能性。RoboCopy 退出并出现错误:错误 1 命令“ROBOCOPY source destination /S *.as?x *.xls? *.mrt”退出,代码为 1。某些文件已复制但复制到错误的文件夹 (_PublishedWebsites)。
xcopy 也会复制到错误的目录 (_PublishedWebsites) 并且也不会复制所有文件。
在命令行中,这两个命令都按预期工作。
我已经更新了我的 robocopy 命令:
ROBOCOPY $(MSBuildProjectDirectory) $(MSBuildProjectDirectory)\..\..\..\EDP\Web\Modules\Invoice\Web /S *.as?x *.xls? *.mrt
Run Code Online (Sandbox Code Playgroud)
现在文件被复制到正确的位置,但 robocopy 的返回码导致 Visual Studio 错误。
这里的帮助下,解决这个:
call ROBOCOPY $(MSBuildProjectDirectory) $(MSBuildProjectDirectory)\..\..\..\EDP\Web\Modules\Invoice\Web /S *.as?x *.xls? *.mrt
if %errorlevel% leq 1 exit 0 else exit %errorlevel%
Run Code Online (Sandbox Code Playgroud)