2011-12-21 148 views
4

如果这两个项目Alpha和项目Beta是C#项目,我们可以设置Beta取决于Alpha,这导致到以下构建顺序:1)Alpha; 2)Beta项目的依赖性,构建顺序

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

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

我们怎样才能设置构建顺序相同的解决方案中的项目MSBuildC++之间C#

回答

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

+0

仍然适用:使用Visual Studio 2012最终更新v11.0.60314.01 2 - 变通办法! -tnx – 2013-05-22 10:57:30