C++ MSBuild BeforeBuild步骤

C++ MSBuild BeforeBuild步骤,c++,visual-c++,msbuild,msbuild-task,pre-build-event,C++,Visual C++,Msbuild,Msbuild Task,Pre Build Event,我昨天询问了有关如何使后构建工作的问题,并将其放置在项目部分的最底部,从而使其工作: 我在另一个项目中尝试了完全相同的方法。这是我的BeforeBuild代码: <Target Name="BeforeBuild"> <Message Text="###HI###" Importance="High" /> </Target> 我在项目中没有另一个beforeTarget Name=“BeforeBuild”,我把它放在项目部分的最底部。.vcx

我昨天询问了有关如何使
后构建
工作的问题,并将其放置在
项目
部分的最底部,从而使其工作:

我在另一个项目中尝试了完全相同的方法。这是我的
BeforeBuild
代码:

<Target Name="BeforeBuild">
    <Message Text="###HI###" Importance="High" />
</Target>

我在项目中没有另一个before
Target Name=“BeforeBuild”
,我把它放在
项目
部分的最底部。.vcxproj正在解析/加载到VisualStudio2010中,没有问题。我已将“MSBuild项目生成输出/日志详细性”设置为“正常”


是否有其他我没有想到的东西会导致此操作无法运行?

除非显式调用,否则不会调用目标,它是一个默认目标,根据调用的目标进行声明,或者在调用之前或之后声明它自己的目标,并调用其中一个目标

因此,如果希望在名为“InitializeBuildStatus”的目标之前调用目标,可以这样编写:

<Target Name="MyBeforeBuild" BeforeTargets="InitializeBuildStatus">
    <Message Text="###HI###" Importance="High" />
</Target>

如果“InitializeBuildStatus”目标运行,它将运行。(您可以在Visual Studio或MSBuild运行中启用详细日志记录,以帮助确定适当的BeforeTarget目标。)

“预构建前”和“后构建”目标由Microsoft某些项目类型的目标系统显式调用。这只提供有限的扩展性。较新的(.NET 4.0)方法是BeforeTargets和AfterTargets


参阅

HMM,C++构建没有预先生成的目标。我没有看到一个好的应用,我看到的唯一合适的候选对象是“PreBuildEvent”目标。但请注意,执行此操作时会禁用设置中定义的预生成事件。只要目标声明处于架构允许的级别,它们的位置不会改变任何东西。@HansPassant我不知道您是否了解原因,但是VisualC和前的代码<>代码>是如何允许的?< Hmya >,它是主观的,但是C++的构建完全是过于复杂的。这种建造模式可以追溯到20世纪70年代,多年来积累了大量的原油。太多“以前”的目标。每个人都有这个问题,例如,构建像Boost这样的公共库经常出错。好吧,如果这很容易,那么任何人都可以做到:)这是解决方案,但是,如果您在“buildsuccessed”之前执行
BeforeTargets=“Build”
它总是在“buildsuccessed”之前运行。编译之后,其他一切都发生了。如果您将您的
BeforeTargets=“Build”
更改为
BeforeTargets=“InitializeBuildStatus”
我将接受。