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