【发布时间】: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