Visual Studio 混合项目调试
Visual Studio mixed projects debugging
我有一个主要基于 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 项目中,我将调试模式设置为混合模式。
- 在native项目中我尝试了native only和混合调试模式
- 在 C# 项目中,我检查了允许不安全代码
- 在工具->选项->调试->常规下的 visual studio 中,我尝试选中和取消选中使用本机兼容模式并在模块加载时抑制 jit 优化。
- 我尝试在单独的 visual studio 实例中打开本机项目,以将调试器附加到整个解决方案中的项目 运行ning,但不允许我作为解决方案调试器执行此操作已经附加到该项目。有人建议这样做,但没有解释如何做到这一点。
问题是我之前提到的C#项目本身就是一个被另一个C#exe项目调用的dll。当我为这个项目启用本机调试时,一切都按预期工作。
我有一个主要基于 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 项目中,我将调试模式设置为混合模式。
- 在native项目中我尝试了native only和混合调试模式
- 在 C# 项目中,我检查了允许不安全代码
- 在工具->选项->调试->常规下的 visual studio 中,我尝试选中和取消选中使用本机兼容模式并在模块加载时抑制 jit 优化。
- 我尝试在单独的 visual studio 实例中打开本机项目,以将调试器附加到整个解决方案中的项目 运行ning,但不允许我作为解决方案调试器执行此操作已经附加到该项目。有人建议这样做,但没有解释如何做到这一点。
问题是我之前提到的C#项目本身就是一个被另一个C#exe项目调用的dll。当我为这个项目启用本机调试时,一切都按预期工作。