【问题标题】:When to use <ProjectReference> in project files?何时在项目文件中使用 <ProjectReference>?
【发布时间】:2012-01-03 18:35:22
【问题描述】:

总结:

Visual Studio 和托管 C++ 和 C# 项目的项目构建顺序错误

说明:

我有一个庞大的(100 多个项目)解决方案文件,它以错误的顺序构建了一些项目。解决方案文件包含以下类型的项目:

  • 原生 C/C++
  • 托管 C++
  • 托管 C#

该解决方案包含不同类型项目之间的所有适当依赖关系。好的,所以当我从命令行(使用 MSBuild)构建时,出现了问题。托管项目(C++ 和 C#)的依赖项以错误的顺序构建。例如,由于缺少托管依赖项,项目将无法构建。例如,托管 C++ 文件的 using 声明将失败:

#using <foo.dll>

因为 foo.dll 还不存在。

这意味着 foo.dll 之前应该已经构建,但没有。 就像我之前提到的,依赖项已在解决方案文件中正确设置。例如,如果 foo 依赖于 baz,我在解决方案文件中有这个...

Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
    ProjectSection(ProjectDependencies) = postProject
        ...
        {2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
    EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
    ProjectSection(ProjectDependencies) = postProject
        ...
    EndProjectSection
EndProject

所以解决方案文件正确地具有依赖关系。但 Foo.vcxproj 项目中的依赖关系仅由#using 指令表示。 我在 Visual Studio 博客上读到,在 msbuild 中订购项目时存在一个已知错误。 http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx

他们的解决方法是在我的项目中添加一个名为的项目,如下所示:

<ProjectReference Include="... foo.csproj"> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
</ProjectReference>

无论如何,我的问题是:我是否只需要为我的托管 C++ 项目执行此操作?或者我是否为托管 C++ 和 C# 项目执行此操作? (我有点相信我不需要为 C# 项目这样做,因为它们的依赖关系是明确的)

注意:我已经尝试在我的构建中的所有项目中使用它,但它并没有那么热,因为我在我的本地项目中遇到了很多奇怪的构建错误......

感谢您对此的任何回复。

【问题讨论】:

    标签: msbuild dependencies projects-and-solutions


    【解决方案1】:

    我遇到了同样的问题,但仅限于 C# 项目。 似乎 MsBuild 没有使用解决方案文件依赖项。它使用项目文件中的项目引用来创建构建顺序。尝试更新您的所有 ProjectReferences 以获得正确的构建顺序。在您的情况下,您必须将托管项目引用(依赖项)添加到您的 C++ 项目文件中。

    您的问题的答案是:是的,您必须为托管 C++ 和 C# 项目执行此操作。如果您使用 MSBuild 进行构建,在 sln 文件中设置依赖项是不够的。

    【讨论】:

    • 我发现如果我添加一个 ProjectReference 元素来链接到本机库,我会在 MSBuild 脚本的深处构建错误。因此,我开始为我的所有托管 C++ 项目添加一个 ProjectReference 到其他 .csproj 文件。现在我将它们添加到我的 .csproj 文件中,看看效果如何。
    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 2014-12-02
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2023-01-08
    • 2020-08-16
    相关资源
    最近更新 更多