【问题标题】:Dependency issue with MSBuild 4.0 when doing DllImport from C# into unmanaged C++ library将 DllImport 从 C# 导入非托管 C++ 库时,MSBuild 4.0 的依赖性问题
【发布时间】:2010-06-15 19:59:12
【问题描述】:

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

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

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

【问题讨论】:

  • 我意识到没有什么可以阻止这两个项目乱序构建。不幸的是,C# 项目的一些后期构建步骤依赖于 Cpp 项目的输出。
  • 您是否尝试更改解决方案的构建顺序?右键单击解决方案,选择“解决方案构建顺序...”。从技术上讲,解决方案文件不使用 MSBuild。他们添加了一些技巧以在构建时将它们转换为 MSBuild 项目,但这并不完美:)
  • @ShadowChaser:它说“使用依赖项选项卡来调整构建顺序。”从问题来看,这就是我所做的。
  • 我就是这么想的,我只是想仔细检查一下。

标签: c# c++ visual-studio-2010 msbuild msbuild-4.0


【解决方案1】:

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“元项目”并直接编辑构建顺序并添加您需要的任何其他自定义项。根据我的阅读,即使在 Microsoft,他们也不会“dogfood”解决方案编译 - 相反,他们在构建期间完全避免使用它们,而是使用自定义 MSBuild 文件。

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

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

【讨论】:

  • 冰川进展
猜你喜欢
  • 1970-01-01
  • 2015-03-13
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多