使用 MSBuild 任务在同一解决方案中构建另一个 (C++) 项目?

Using MSBuild task to build another (C++) project in the same solution?

由于一个我目前无法打破的奇怪的依赖链,我想构建一个 C++ 项目作为 "post build" 从完全相同的解决方案中的另一个 C++ 项目开始的步骤。

我知道如何在命令行上调用 MSBuild,但我认为使用内置 MSBuild 任务来触发另一个项目上的构建可能更有意义:

my.vcxproj:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <Target Name="BuildTheOtherProject" AfterTargets="Build">  
      <MSBuild Projects="..\theother\theother.vcxproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)">
      </MSBuild>  
  </Target>
</Project>

乍一看这似乎工作正常,但这是否会继续工作(思考:完整解决方案的并行项目构建等)以及我是否将正确的值传递给 MSBuild 任务?

有一个 related question 对 C# 项目提出了同样的问题,csc 似乎有问题(与 vcxproj 无关),所以我想知道一般的立场是什么是这个吗?

(我在 Visual Studio 2015 atm。)

是的,您正在正确调用 MSBuild 任务。但是你不应该这样做。这是糟糕的风格。并且您肯定会在将来使用隐藏在 .vcxproj 文件中的这个小技巧绊倒某人。以正确的方式指定依赖关系:在解决方案文件 (.sln) 中,visual studio 将确保文件以正确的顺序构建。如果您想要更强大的功能,您可以使用 <ProjectReference> 而不是使用解决方案文件来指定依赖关系,但这是另一个主题。

我在代码库非常庞大的公司工作了这么多年:从来没有人做过这样的把戏,也不应该。