调试 ASP MVC 应用程序中使用的 C++ DLL

Posted

技术标签:

【中文标题】调试 ASP MVC 应用程序中使用的 C++ DLL【英文标题】:Debug a C++ DLL used in ASP MVC application 【发布时间】:2020-06-05 07:49:46 【问题描述】:

我的 ASP MVC5 Web 应用程序项目的 bin 文件夹中有一个 C++ DLL。 (我已经从原始 C++ 项目中复制并粘贴了它,因为我无法添加引用)我能够调用 DLL 的一些函数(使用 DLLImport)。我的其中一项功能有问题。只有当我能够进入 C++ DLL 的代码时才能解决这个问题。我也有 C++ 项目的代码(使用 Cmake 构建)。 从我的 Web 应用程序代码进行调试时,如何访问 C++ 代码。如果我使用 F11,我应该能够访问 C++ 代码。

【问题讨论】:

你调试的是net core web项目还是net framework项目? 感谢@PerryQian-MSFT 尝试直接从 C++ 项目的调试文件夹中添加 dll 的引用。我无法添加它,因为它不是 .net 程序集。当我尝试在 Configuration-> Advanced -> Common runtime Support 选项卡中添加 clr 支持时,我无法构建它。请告诉我是否可以在不更改这些配置的情况下添加 dll。 您是否按照我的回答来解决您的问题?首先,您可以尝试右键单击您的c++项目-->配置属性-->调试-->将Debugger Type更改为Mixed(Net Core or Net Framework),然后再次构建您的项目。另外,当你在 c# 项目中调试你的项目时,你应该启用native code debugging。而且我可以在没有任何错误的情况下对其进行测试。 在我的 Web 项目中启用本机代码调试后,我的浏览器中出现错误消息:“无法加载文件或程序集 'OmpWeb' 或其依赖项之一。尝试加载格式不正确的程序。说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误及其源自代码的位置的更多信息。 如你所说,我在 DllImport 中使用了 dll 的完整路径,这会导致问题吗? 【参考方案1】:

调试在 ASP MVC 应用程序中使用的 C++ DLL

1) 首先,确保您所引用的 DLL 在其文件夹中有 PDB 文件或其他输出文件。

您应该在 VS IDE 中打开 c++ 项目,然后确保使用 Debugx64 模式构建它。如果是这样,请重新构建它。

然后在 c# web 项目中,使用 DLLImport 引用输出 Debug 文件夹中的xxx.dll,其中存在 pdb 和其他整个文件。

2) 其次,转到工具 --> 选项 --> 项目和解决方案 -- > Web 项目 --> 使用 64 位版本的 IIS Express

3)第三,如果你调试的是net core web项目,请在项目上右键-->Properties-->Debug-->勾选启用本机代码调试

如果你调试的是net framework web项目,请在项目上右键-->Properties-->Web-->勾选Native Code

4)第四,然后关闭VS Instance,删除asp.net核心工程的binobj文件夹,然后重启你的web 项目并再次测试。

另外,您可以查看此文档Debug C# and C++ in the same debugging session。

更新 1

由于该错误,我认为您应该将IIS 更改为x64,因为您使用的是x64 本机dll。右键单击您的项目-->Properties--> Web-->将IIS bitness更改为x64

【讨论】:

谢谢@Perry Qian-MSFT 我也试过了,但是来自 dll 的符号(如 combase.dll)继续在 Visual Studio 中加载,并且浏览器显示“无法访问该站点. localhost 拒绝连接” 我认为这与您的项目本身或IIS有关。首先关闭VS Instance,进入你的解决方案文件夹,你会发现一个隐藏文件夹叫.vs然后进入文件夹-->config-->然后删除applicationhost.config文件。然后打开Visual Studio,右键-单击您的项目--> Properties --> Web>并尝试更改为使用另一个端口号。(https://localhost:xxxx/) 我不知道该谢谢你。它起作用了,我能够进入我的 C++ 本机代码。 :)

以上是关于调试 ASP MVC 应用程序中使用的 C++ DLL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中调试死机白屏

调试 ASP.NET MVC 应用程序时避免部署

IIS Express 在调试 ASP.NET MVC 时出现拒绝访问错误

在 asp .net MVC4 应用程序中,调试在 javaScript 代码中不起作用

ASP.NET VNext 调试 MVC 源码

在调试 ASP.NET MVC 应用程序期间未更新 CSS