2

在 VS2010 中显式设置非托管 C++ 项目和 C# 项目之间的依赖关系在 VS2010 中得到尊重,但在 MSBuild 4.0 中忽略依赖关系。

不可能从 C# 项目 afaik 添加对非托管 C++ 项目的引用。

如果解决方案包含非托管和托管项目,我如何确保正确的构建顺序?

4

1 回答 1

3

MSBuild 中存在错误,并且无法正确遵守在解决方案级别添加的项目依赖项。看看http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613/https://connect.microsoft.com/VisualStudio/feedback /details/613284/msbuild-4-does-not-respect-build-order-when-building-a-solution

Microsoft 在连接页面上的帖子表明它是 64 位版本的 MSBuild 中的一个错误。尝试切换到 32 位版本,看看是否能解决问题。

如果你不能这样做,或者它不起作用,还有其他两种选择。它们都不是理想的。

第一个选项是手动编辑 SLN 文件并更改项目在文件中出现的顺序以匹配您想要的构建顺序。我想 Victor 的解决方案会是一个更好的主意,因为对解决方案文件的额外更改最终可能会再次覆盖这些更改。

第二个选项是手动导出解决方案的 MSBuild“元项目”并直接编辑构建顺序并添加您需要的任何其他自定义项。根据我的阅读,即使在微软,他们也不会“狗粮”解决方案编译——相反,他们在构建过程中完全避免使用它们,而是使用自定义的 MSBuild 文件。

要生成 metaproj,请将环境变量 MSBuildEmitSolution 设置为 1。在解决方案上运行 MSBuild 后,您应该会在同一目录中看到一个“.metaproj”文件 - 它包含 MSBuild 在内存中生成的用于编译解决方案的脚本。您应该能够进行必要的编辑,将其签入,然后设置构建服务器来编译它。

该问题将在 Visual Studio 的下一版本中消失。Microsoft Connect 页面上有来自 Microsoft 的帖子,它将在下一个版本中修复,并且有传言说他们正在摆脱 .sln 文件并用适当的 MSBuild 项目替换它们。

于 2011-07-26T15:33:19.723 回答