我正在尝试编写将复制文件的msbuild postbuild事件。它不必是100% - 目标文件可能被使用或锁定,在这种情况下我希望构建成功。
所以我有类似*
的东西PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir)"
当另一个进程使用$(TargetDir)\foo
时,我收到错误,我的构建失败。所以我试试
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir) -ErrorAction SilentlyContinue"
但是错误被打印出来并且失败了。所以我试试
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "try { cp foo `$(TargetDir) } catch {}"
现在错误没有打印但它仍然失败,因为如果我执行上面的$LastExitCode
仍然等于1。
我可以在try catch和powershell中再次包装但是如何正确地抑制错误?
*实际命令如下 - 不重要
PowerShell -NoProfile -ExecutionPolicy Bypass -Command `"try { ls '`$(SolutionDir)\packages\GhostScriptSharp.*\Tools\gsdll32.dll' | Sort -Descending | Select -First 1 | cp -Destination '`$(TargetDir)' } catch {}`""
答案 0 :(得分:2)
您可以使用exit
关键字明确设置脚本的退出代码:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "cp foo `$(TargetDir) -ErrorAction SilentlyContinue; exit 0"