Visual Studio:多个后期构build命令?

Visual Studio 2008允许我声明一个命令并将其附加到项目的构build后事件。 像许多开发人员一样,我经常使用它来将文件复制到应用程序输出目录。

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

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

您可以根据需要键入尽可能多的构build后命令。 只需用换行符分隔即可。

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

发布构建事件命令行

重要说明:执行batch file时,必须使用“call”语句来执行以下行。 如果不使用“call”,则执行进入.bat,不会返回到以下行。 与DOS提示符相同。

例如:

call MyBatch1.bat call MyBatch2.bat 

每个命令应该在一个单独的行。 我发现的是,如果执行其中一个命令时出现错误,那么整个post-build失败,因此您需要逐个尝试每个post-build命令进行debugging。

还有另外一个select:你可以用&&分开命令。 例如

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

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

用换行符分隔更容易阅读,所以你应该更喜欢它。 不过我知道至less有一个情况是&&是有用的。 这是情况,当您使用属性表在不同的机器上有不同的后构build步骤。 VS 2008不允许直接在属性表中设置PostBuildStep,但是您可以使用您的命令添加一个用户macros并从主项目设置中调用它。 macros是单行的,所以你可以使用&&在那里有多个命令。

添加到womp的答案 :

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

 %(Command) echo foo 

%(Command)展开到%(Command)的前一个值。

就我个人而言,我会为所有构build事件执行此操作,即使我目前还没有inheritance的命令,因为这样可以确保在稍后添加属性表时不会有任何问题。

wompbuild议的方法在Visual Studio 2015/2017(Windows)中可用,但在Visual Studio for Mac(Preview)中不起作用,这似乎只执行第一个命令。 我发现在Mac和Windows版本的Visual Studio中唯一的方法是链接2个MSBuild命令:

 <Target Name="AfterResolveReferences"> <Exec Command="path\MyFirstCommand.exe -parameters" /> </Target> <Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" > <Exec Command="path\MySecondCommand.exe -parameters" /> </Target> 

上面的例子使用“AfterResolveReferences”事件,但显然也适用于PostBuild事件。

只需在您的批处理脚本中加前缀“call”即可。 因此,批处理脚本下面的语句也会在从批处理脚本返callback用之后执行。

 call Script1.cmd call Script2.bat