调试 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++ 项目,然后确保使用 Debug 和 x64 模式构建它。如果是这样,请重新构建它。
然后在 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核心工程的bin和obj文件夹,然后重启你的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的主要内容,如果未能解决你的问题,请参考以下文章
IIS Express 在调试 ASP.NET MVC 时出现拒绝访问错误