项目C#和C ++项目之间的依赖关系,构建顺序

时间:2011-12-21 17:46:57

标签: visual-studio-2010 msbuild dependencies

如果项目Alpha和项目Beta都是C#项目,我们可以设置Beta取决于Alpha,这会导致以下构建顺序:1){{ 1}}; 2)Alpha

如果项目Beta是C ++项目,我们无法将项目Alpha中的引用添加到Alpha,因为Visual Studio 2010不允许这样做。实际上我们可以用记事本破解Beta文件,但它没有帮助。我们可以右键点击解决方案,选择csproj并说明Project Dependencies取决于Beta

问题: MSBuild不尊重Alpha文件中设置的依赖项,并以错误的顺序构建项目 - 1)sln; 2)Beta。请注意,Visual Studio尊重构建顺序。

我们如何在同一解决方案中的AlphaMSBuild项目之间设置C#的构建顺序?

1 个答案:

答案 0 :(得分:5)

尝试在清理解决方案后将C ++项目引用添加到C#项目。这对我有用,虽然我偶然发现了这种“解决方法”。

对我来说,看起来Visual Studio正在检查引用项目的构建产品,当它注意到不兼容时,它将拒绝添加引用。但是,如果构建产品无法检查(因为您清理了解决方案),Visual Studio很乐意添加引用。

我在Visual Studio和我们的TFS构建服务器(AFAIK使用MSBuild)上测试了结果解决方案,并在两种情况下都正确评估了构建依赖项。

在您的问题中,您还提到手动编辑.csproj文件没有帮助。我无法证实这一点。我能够添加以下引用,并再次获得积极的构建结果:

<ProjectReference Include="..\Foo\Foo.vcxproj">
  <Name>Foo</Name>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <Private>False</Private>
</ProjectReference>

我正在添加ReferenceOutputAssembly元素,因为this blogs.msdn.com article建议它。但是,根据我的经验,构建也可以在没有元素的情况下工作。这篇文章仍然值得一读,因为它解释了为什么 MSBuild不尊重解决方案中定义的依赖关系。

为了完整起见:我正在运行Visual Studio 2010,版本10.0.40219.1 SP1Rel