【问题标题】:Projects dependencies between C# and C++ project, build orderC# 和 C++ 项目之间的项目依赖关系,构建顺序
【发布时间】:2011-12-21 17:46:56
【问题描述】:

如果项目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 遵循构建顺序。

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

【问题讨论】:

    标签: visual-studio-2010 msbuild dependencies


    【解决方案1】:

    尝试在清理解决方案之后将您的 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

    【讨论】:

    • 仍然适用:使用 Visual Studio Ultimate 2012 v11.0.60314.01 更新 2 - 解决方法有效! -tnx
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 2017-02-11
    • 2014-02-26
    • 2012-01-15
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多