代码之家  ›  专栏  ›  技术社区  ›  GregC Benjamin Baumann

当DllImport从C到非托管C++库时,MSBudid 4的依赖性问题

  •  1
  • GregC Benjamin Baumann  · 技术社区  · 15 年前

    在VS2010中,在VS2010中明确设置VS2010中的依赖性在VS2010中得到了尊重,但是在MSBug 4中忽略了依赖性。

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   ShadowChaser    14 年前

    msbuild中有一个bug,无法正确处理在解决方案级别添加的项目依赖项。看一看 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在Connect页上发布的一条消息表明,它在64位版本的msbuild中是一个错误。尝试切换到32位版本,看看是否解决了问题。

    如果你做不到,或者做不到,还有两个选择。它们都不是理想的。

    第一个选项是手动编辑SLN文件并更改项目在文件中的显示顺序,以匹配所需的构建顺序。我认为维克托的解决方案会是一个更好的主意,因为对解决方案文件的其他更改可能会再次覆盖这些更改。

    第二个选项是手动导出解决方案的msbuild“metaproject”,直接编辑生成顺序,并添加所需的任何其他自定义设置。据我所读,即使是在微软,他们也不“狗食”解决方案编译——相反,他们在构建过程中完全避免它们,而是使用自定义的msbuild文件。

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

    这个问题将在下一个版本的Visual Studio中消失。Microsoft Connect页面上有一条来自Microsoft的帖子,该帖子将在下一版本中修复,有传言称,他们正在删除.sln文件,并将其替换为适当的msbuild项目。