Visual Studio:多个post-build命令?

Dav*_*man 95 c# visual-studio-2008

Visual Studio 2008允许我声明一个命令并将其附加到项目的post-build事件.像很多开发人员一样,我经常使用xcopy文件到应用程序输出目录.

我正在开展一个项目,我需要将文件从两个不同的地方xcopy文件复制到两个不同的目的地,所有这些都在一个项目中.换句话说,我需要从同一个构建后事件中调用两个不同的xcopy命令.看起来后期构建事件只需要一个命令,如果我需要调用多个命令,我将不得不将命令放在*.bat文件中并从构建后事件中调用它.

这是正确的,还是有更简单的方法从后构建事件中调用两个命令?在此先感谢您的帮助.

wom*_*omp 118

您可以根据需要输入任意数量的post build命令.只需用换行符分隔它们即可.

这是我的一个项目的一个例子.

发布构建事件命令行

  • 尽管处于不同的行,但我的命令正在一起运行,就像它们在一条线上一样. (22认同)
  • 不幸的是,如果其中一个中间命令失败,至少VS2015不会报告错误......它会根据构建后步骤报告最后一个命令的结果. (5认同)
  • 包含屏幕截图仅在您打算永久托管时才有用. (3认同)
  • 看起来这可以在Visual Studio内部工作 - 但是如果在TFS构建机器上使用MsBuild则不受支持.MsBuild剥离换行符,然后由于语法错误而使命令失败. (3认同)

huh*_*uha 104

要点:执行批处理文件时,必须使用"call"语句,以便执行以下行.如果你不使用"call",执行进入.bat并且不会返回到以下行.与DOS提示符相同.

例如:

call MyBatch1.bat
call MyBatch2.bat
Run Code Online (Sandbox Code Playgroud)

  • 这个技巧适用于grunt和npm命令,因为它们都运行批处理文件(grunt.cmd和npm.cmd). (2认同)

Ste*_*eed 14

还有另一种选择:您可以将命令分开&&.例如

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

这与使用换行符分离不完全相同:&&如果前一个命令失败,则下一个commant将不会运行.

按换行分隔更容易阅读,因此您应该更喜欢它.但是我至少知道一个&&有用的案例.当您使用属性表在不同的计算机上具有不同的构建后步骤时,就是这种情况.VS 2008不允许直接在属性表中设置PostBuildStep,但您可以使用命令添加用户宏,并从主项目设置中调用它.宏是单行,因此您可以&&在那里使用多个命令.


Lis*_*isa 11

每个命令都应该在一个单独的行上.我发现,如果执行其中一个命令时出错,则整个构建后失败,因此您需要一次尝试一个构建后的命令进行调试.

  • "xcopy/f"将显示完整的源文件和目标文件名,这些文件将在失败之前打印,使多个xcopy命令比多个复制命令更容易诊断. (2认同)

小智 8

用&或&&或;分隔命令 在VS2017中不起作用.无法相信这种简单的功能在VS2017中不可用.Visual Studio尝试将后构建事件窗口中的整个文本作为一个字符串执行.我现在唯一的选择就是创建一个我不太喜欢的批处理脚本.


Max*_*uxa 5

添加到womp答案:

如果您在同一个构建事件中有多个属性表,可以执行以下操作来链接命令:

%(Command)
echo foo
Run Code Online (Sandbox Code Playgroud)

其中%(Command)扩展为命令的先前值.

我个人对所有构建事件这样做,即使我目前没有继承命令,因为这样可以确保以后添加属性表时不会出现问题.