asp.net core 引用 c++ dll,部署到 iis 错误排查

asp.net core 引用c++dll,并部署到生产环境的iis,由于更换服务器情况较少,再次部署机会不多,经常会忘记一些操作步骤,生产环境没有安装开发环境,不便于错误排查,现将本次部署的主要过程及问题排查情况记录如下,方便下次对照执行。

一、创建项目,部署到IIS

创建一个引用 c++ dll 的 asp.net core 项目,按以下步骤部署到目标服务器iis

  1. 按照微软官网步骤,安装IIS。
  2. 安装对应版本的 ASP.NET Core 模块/托管捆绑包:
    https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/?source=recommendations&view=aspnetcore-6.0
  3. 在iis中创建网站(不必按网上的说明,不必在应用程序池中选择“无托管”)
  4. 为了便于从vs中直接发布到目标服务器,需要在服务器上安装Web Deploy,并完成相关配置文件的导出、导入,详见https://blog.csdn.net/weixin_44367548/article/details/126649234?spm=1001.2014.3001.5502
  5. 从vs中发布项目到目标服务器。

二、错误排除

按上述步骤完成部署后,运行swagger/index.html,可能会出现以下错误,对应解决方案如下:

1. 404 错误

提示找不到http://localhost:8089/swagger/index.html页面
asp.net core 引用 c++ dll,部署到 iis 错误排查_第1张图片
原因: swagger默认在开发环境中才启用,在vs调试时环境变量设置了Development,能正常看到swagger页面,但是发布后,web.config文件并没有配置该变量。
asp.net core 引用 c++ dll,部署到 iis 错误排查_第2张图片
解决: 注释掉program.cs中相关判断代码,或者在web.config文件中增加环境变量,详见:
https://blog.csdn.net/qq_34017733/article/details/121948393?spm=1001.2014.3001.5506

2. https 重定向

在地址栏中输入的是http,页面被重定向到了https。
原因: program.cs中默认启用了重定向。
解决: 注释掉 //app.UseHttpsRedirection(); 这一行代码

3.500 内部错误

运行涉及调用c++ dll的功能时,将报告500内部错误,但是看不到错误详情。
asp.net core 引用 c++ dll,部署到 iis 错误排查_第3张图片

默认情况下客户端看不到错误详情,为了看到错误详情,有两种办法:
办法一:修改配置文件web.config
在配置文件中增加环境变量 。
网上提到还需要在iis网站设置中,选择“错误页”,选中“详细错误”,这个操作反映到配置文件是:,但是实际测试不需要修改这个也能在客户端看到错误详情。
asp.net core 引用 c++ dll,部署到 iis 错误排查_第4张图片

** 办法二:控制台启动应用程序**
参考微软官网[《对 Azure 应用服务和 IIS 上的 ASP.NET Core 进行故障排除》]的“IIS 疑难解答”章节(https://learn.microsoft.com/zh-cn/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-6.0):
在iis项目文件夹启动cmd,运行 dotnet ..dll 命令(或者直接双击运行目录中的.exe),在浏览器中访问http://localhost:5000,调用相应功能时,控制台将输出详细错误信息。注意:访问的端口号改为5000.
asp.net core 引用 c++ dll,部署到 iis 错误排查_第5张图片
从报告的错误看,找不到 c++dll及其依赖项,相应处理办法:
1)确保文件存在,vs发布时不会自动拷贝这些文件。
2)确保IIS权限。
3)使用depends工具查看依赖项,https://blog.csdn.net/fangye945a/article/details/125397506,如果是/MDd方式编译的dll文件,可能会缺少cvruntime1xxd.dll文件,目标服务器没有开发环境,操作系统不会提供调试版本的运行时文件。解决办法:以/MT方式重新编译dll文件即可。
asp.net core 引用 c++ dll,部署到 iis 错误排查_第6张图片

你可能感兴趣的:(asp.net,c++,服务器)