Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VisualStudio混合项目调试 我有一个主要基于C++项目的解决方案,但是我偶尔会需要使用在原生C++中编写的库。我解决这个问题的方法是使用一个本机项目,它只是作为本机库的包装器,在本例中是OpenCV(我知道我可以在C#中直接使用EMGUCV,但根据我的经验,它有一些我想要避免的bug,这更像是一个概念证明)。然后,我有一个C++ CLR项目,它引用了本地包装器,最后引用了一个C++ C++项目引用的C++项目。br>严格地说,我可以直接从CLR项目引用OpenCV,而不是使用本机包装器项目,但我希望以这种方式组织它,既符合解决方案其余部分的组织方式,又因为我可能出于另一个原因希望使用这种结构_C#_C++_Visual Studio_Clr - Fatal编程技术网

VisualStudio混合项目调试 我有一个主要基于C++项目的解决方案,但是我偶尔会需要使用在原生C++中编写的库。我解决这个问题的方法是使用一个本机项目,它只是作为本机库的包装器,在本例中是OpenCV(我知道我可以在C#中直接使用EMGUCV,但根据我的经验,它有一些我想要避免的bug,这更像是一个概念证明)。然后,我有一个C++ CLR项目,它引用了本地包装器,最后引用了一个C++ C++项目引用的C++项目。br>严格地说,我可以直接从CLR项目引用OpenCV,而不是使用本机包装器项目,但我希望以这种方式组织它,既符合解决方案其余部分的组织方式,又因为我可能出于另一个原因希望使用这种结构

VisualStudio混合项目调试 我有一个主要基于C++项目的解决方案,但是我偶尔会需要使用在原生C++中编写的库。我解决这个问题的方法是使用一个本机项目,它只是作为本机库的包装器,在本例中是OpenCV(我知道我可以在C#中直接使用EMGUCV,但根据我的经验,它有一些我想要避免的bug,这更像是一个概念证明)。然后,我有一个C++ CLR项目,它引用了本地包装器,最后引用了一个C++ C++项目引用的C++项目。br>严格地说,我可以直接从CLR项目引用OpenCV,而不是使用本机包装器项目,但我希望以这种方式组织它,既符合解决方案其余部分的组织方式,又因为我可能出于另一个原因希望使用这种结构,c#,c++,visual-studio,clr,C#,C++,Visual Studio,Clr,这种方法的第一个问题是,我找不到VisualStudio自动将本机包装器的dll包含在最终目标目录中的方法。从CLR项目中引用本机项目是完美的,从C#项目中引用CLR项目是没有问题的,但是当我构建它时,它不会运行,因为本机DLL没有被带到最终目标。我通过添加一些构建后操作来复制本机dll和pdb文件来解决这个问题。这是可行的,我能够运行代码,没有错误。但是,我无法调试本机项目。我在C#项目和CLR项目中遇到了断点,但在本机项目中没有遇到断点 我的尝试: 在C#项目属性中,我启用了本机代码调试选

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

我的尝试:

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

    • 问题在于,我之前提到的C#project本身就是一个被另一个C#exe项目调用的dll。当我为此项目启用本机调试时,一切正常。

      唯一明显遗漏的是“使用托管兼容性模式”复选框。对于C++/CLI项目,必须启用。同时关闭“仅我的代码”以确保。验证是否可以在“输出”窗口中看到加载的本机DLL,并在“调试>窗口>模块”窗口中查看以验证调试器是否找到了它的PDB文件。我在“工具”->“选项”中启用了“使用托管兼容性模式”,但没有为每个项目指定一个?在输出或“模块”窗口中,我找不到任何本机dll加载的内容。不是OpenCV DLL,也不是我的。但是代码确实在运行,因为我正在输出一些确实显示的结果图像。只有您启动的EXE项目的调试设置是相关的。没有看到DLL被加载当然是一个麻烦的迹象。除了忘记启用非托管调试之外,没有任何提示说明为什么这不起作用。一定不要接受例外情况。