我正在使用 msbuild 构建一个 C++ 项目,并且我想抑制“构建后事件”。我尝试了以下属性但没有成功:
/property:PostBuildEvent=
/property:VCPostBuildEventTool=
两者都不会产生任何影响,并且仍会执行构建后事件。
有谁知道如何使用 msbuild 抑制这些(以及可能的其他)事件?
我只是想出了如何做到这一点。涉及2个步骤:
首先,如果您尚未使用批处理文件启动 msbuild 进程,请创建一个调用 msbuild 进程的批处理文件。然后在调用 msbuild 进程之前在批处理文件中添加一个变量。像这样的东西:
set ISFULLBUILD=True
msbuild TFSBuild.proj >> BuildOutput.txt
然后,您需要修改您的构建后事件以仅在未设置变量或具有错误值的情况下执行某些操作:
IF NOT '%ISFULLBUILD%'=='True' copy /y $(TargetFileName) "..\..\..\..\..\..\Binaries\$(ConfigurationName)\"
在这种情况下 - TargetFileName (Whatever.dll) 只会在您从 Visual Studio 构建时被复制。但是,当您使用新的批处理文件构建时 - 它不会在 IF 语句之后执行命令。
您是否尝试将构建事件设置为空白以外的其他内容?如果你用多余的东西覆盖它,比如“dir”或其他东西,它是否仍然执行原始的构建后步骤?
这不是最优雅的解决方案,但它可能会起作用。
Ack,看起来 msbuild 实际上调用了不那么灵活的 vcbuild,所以我想我被卡住了。
如果您能够修改构建后事件,则可以使用环境变量来执行此操作,例如SKIP_POST_BUILD_EVENTS
. 然后,您可以在调用之前设置该环境变量msbuild
,并在执行任何代码之前检查该变量是否存在于构建后事件中。