当 运行 用于不同配置时,MSBuild 不必要地 运行s 自定义生成工具

MSBuild unnecessarily runs custombuild tool when run for different configurations

我有一个 C++ 项目,我需要 运行 一些头文件上的自定义构建工具来生成编译该项目时所需的代码。一般来说,我的配置有效。我触发构建,VS/MSBuild 检测输出文件是否是最新的,并且 运行 仅在必要时使用自定义构建工具。

但是,如果构建 运行 与同一项目的另一个配置相结合,则会出现问题。这两种配置都取决于自定义构建工具的输出文件。因此,如果 运行 按顺序只有一个配置应触发自定义构建工具 运行。对于第二次触发构建的配置,自定义构建工具的输出文件已经存在并且是最新的。因此无需再次构建它们。不幸的是,这正是正在发生的事情。由于自定义构建工具需要相当长的时间 运行,这会显着增加构建时间。 另一个有趣的方面是,一旦两个配置都具有 运行,我可以再次触发它们中的任何一个,并且不会调用自定义构建工具。

我对 documentation 的期望是自定义构建工具被触发:

但是所有这些都独立于触发构建的配置。

有人知道为什么会发生这种情况吗?我检查了两种配置的自定义构建工具的设置是否相同。两种配置的输出文件都生成到同一文件夹中。

您所指的文档基本上是正确的,但它没有说那里的所有内容基本上都是每个项目 configuration/platform 因为它使用 tracker.exe,这取决于默认情况下的 .tlog 文件进入中间目录。因此,正如您所了解的那样,让所有配置都使用相同的 tlog 文件位置应该让跟踪器满意并且只在需要时调用自定义构建工具,独立于 configuration/platform。不过,我不确定我会推荐其中的任何一个,共享临时对象文件可能会在以后给您带来麻烦。

另一种处理此问题的方法是添加一个只有一个配置的单独项目,比如 'Custom',然后在那里进行自定义构建。比让您当前的项目依赖于该项目,并在解决方案的配置管理器中调整所有条目,以便您现在拥有的每个配置都为新项目构建 'Custom' 配置。