c# - Visual Studio 混合项目调试

标签 c# c++ visual-studio clr

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

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

我尝试过的:

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

最佳答案

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

关于c# - Visual Studio 混合项目调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49429746/

相关文章:

c++ - 与 Visual Studio 6.0 相关

c# - .NET v4.7 中不存在 TLS1.2

c# - IFrame 中的 Response.REdirect

c++ - 如何刷新 Windows 中的所有文件缓冲区?

c++ - cpp-静态成员和函数

visual-studio - 是否有用于以编程方式运行 Visual Studio 单元测试的 API?

c# - 无法启动服务

c# - 如何从 ResourceDictionary 引用 BindingProxy 实例

c# - 使用 C# 构建 REST 服务

c++ - 为什么 EOF 字符放在行尾时不起作用?