Visual Studio混合项目调试

时间:2018-03-22 13:18:41

标签: c# c++ visual-studio clr

我有一个主要基于C#项目的解决方案,但我偶尔需要使用用本机c ++编写的库。我解决这个问题的方法是让一个原生项目简单地充当本机库的包装器,在本例中是OpenCV(我知道我可以直接在C#中使用EMGUCV,但根据我的经验,它有一些我想要的错误避免,这更像是一个概念证明)。然后我有一个引用本机包装器的C ++ CLR项目,最后是一个引用C ++ CLR项目的C#项目。
严格来说,我可以直接从CLR项目引用OpenCV,而不是使用本机包装器项目,但我想以这种方式组织它以符合其他解决方案的组织方式,因为我可能在有些观点是出于另一个原因想要这种结构。

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

我尝试过:

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

1 个答案:

答案 0 :(得分:1)

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