Visual Studio 混合项目调试

里达戈

我有一个主要基于 C# 项目的解决方案,但我偶尔需要使用用本机 C++ 编写的库。我解决这个问题的方法是拥有一个本地项目,它只是作为本地库的包装器,在这种情况下是 OpenCV(我知道我可以直接在 C# 中使用 EMGUCV,但根据我的经验,它有一些我想要的错误避免,这更像是一个概念证明)。然后我有一个引用本机包装器的 C++ CLR 项目,最后是一个引用 C++ CLR 项目的 C# 项目。
严格来说,我可以直接从 CLR 项目中引用 OpenCV,而不是拥有本机包装器项目,但我想以这种方式组织它,以符合解决方案其余部分的组织方式,并且因为我可能在某些时候想要具有这种结构的另一个原因。

这种方法的第一个问题是,我找不到让 Visual Studio 自动将本机包装器的 dll 包含在最终目标目录中的方法。从 CLR 项目引用本机项目可以完美地工作,从 C# 项目引用 CLR 项目没有问题,但是当我构建它时,它不会运行,因为本机 dll 没有被带到最终目标。我通过添加一些后期构建操作来复制本机 dll 和 pdb 文件来解决这个问题。这行得通,我可以无错误地运行代码。但是,我无法调试本机项目。我在 C# 项目和 CLR 项目中打断点,但没有在本机项目中打断点。

我尝试过的:

  • 在 C# 项目属性中,我启用了本机代码调试选项。
  • 在 CLR 项目中,我将调试模式设置为混合。
  • 在本机项目中,我尝试了仅本机和混合调试模式
  • 在 C# 项目中,我检查了允许不安全代码
  • 在工具->选项->调试->一般下的visual studio中,我尝试检查和取消选中使用本机兼容模式并抑制模块加载的jit优化。
  • 我尝试在单独的 Visual Studio 实例中打开本机项目,将调试器附加到从整个解决方案运行的项目,但我不允许这样做,因为解决方案调试器已经附加到该项目。有人建议这样做,但没有解释如何做到这一点。
里达戈

问题是我之前提到的 C# 项目本身就是一个被另一个 C# exe 项目调用的 dll。当我为这个项目启用本机调试时,一切都按预期工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章