Visual Studio 混合项目调试

Visual Studio mixed projects debugging

本文关键字:调试 项目 混合 Studio Visual      更新时间:2023-10-16

我有一个主要基于 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。当我为此项目启用本机调试时,一切都按预期工作。