前言:本文只提供排错思路和步骤,具体报错要看各自项目代码。本文vs版本是2019。
1、如下图所示,项目使用Debug启动调试,项目正常运行

2、发布成文件夹,部署到IIS后报错500


3、发布文件夹部署到本机的iis后报错。报错HTTP ERROR 500属于站点启动失败,要么是环境问题,要么是代码报错导致站点启动失败。但是本地Debug调试正常,考虑到都是本机的环境,应该不是.net环境问题(注意:如果是本机调试,部署到另一台服务器,则要考虑.net环境问题)
4、对比后发现,调试是Debug模式,发布的是Release模式,会不会是这里导致的呢。为了测试,把调试启动方式改为Release模式。发现使用Release调试确实报错了,如下图:

5、此现象有两个问题:
问题1:代码没有任何改变,只是把Debug改为Release模式就报错了。
问题2:错误代码500是有报错了,但是代码没有弹出错误信息。
6、因为Debug调试能正常启动,排除代码本身错误。查看Debug和Release的配置,发现确实有两处不同:

7、关于配置“优化编码”,发现代码会在编译时进行代码裁剪,所以导致Release调试时,实际运行代码与本地代码是不同版本的,所以Release调试有报错也不会在代码弹出。

8、那就在Release模式下,把“优化编码”去掉勾选调试看看。(注意:如果有多个项目,多个项目的“优化编码”都要去掉,如果只去勾选了主项目,报错代码所在项目没去勾选,依旧不会弹出报错)

9、Release模式调试也代码报错了

10、参考步骤6的图片配置,发现是swagger依赖的xml文件,在Release模式生成的时候,没有生成对应的xml,所以导致了报错。
11、已经定位到所有问题,回答步骤5的问题:
问题1:代码没有任何改变,只是把Debug改为Release模式就报错了。
答:Release模式下没有勾选生成xml,在swagger配置绑定xml时,缺少xml文件报错。
问题2:错误代码500是有报错了,但是代码没有弹出错误信息。
答:Release模式勾选了“优化编码”,导致调试时程序与本地代码 实际上是两套代码,所以本地代码不会在报错时进入代码并弹出。
12、最后,记得把Release模式下的“优化编码”配置重新勾选上。重新发布成文件夹部署即可。

745

被折叠的 条评论
为什么被折叠?



