HTTP 错误 500.21 - Internal Server Error
处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
这个是第一次编译后会出现,一直有这个错误。过一会儿,这个时间不确定,然后再刷新这个页面就没错了。经过试验,无论你打开的是网站哪个页面。只要编译过项目,这个问题必然出现。
网上搜索到的清一色都是这种解决方案:
以管理员运行下面的命令注册:
32位机器: c:\windows\microsoft.net\framework\v4.0.30319\aspnet_regiis.exe -i
64位机器: c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_regiis.exe -i
但是,在我的电脑上,这种解决方案不起作用。担心是百度搜索不给力。然后用google搜索,但是搜索的答案都是这个。没其他的。又去*网站,得到的也基本是这个答案。我甚至重装了.net framework 4.6.1,还更改过框架的支持,原来用的是4.52框架,改成4.6,仍然是这个问题。
由于我这一段一直在用重构工具对代码进行优化,怀疑是不是重构代码问题。仔细检查,甚至用版本控制工具把代码恢复到改动前的,但仍然是这个问题。这个时候内心是崩溃的,因为时间拖了几天,一直没找到答案。唯一幸运的是,服务器没有这个问题。由于一直没有找到问题所在,我把这个错误页面的所有提示仔细的看了一遍又一遍,希望找到解决的线索。因为无论是哪个页面都是这个错误。最终把目光转向了web.config,也只有这里出问题才会导致这种错误吧。
我用版本控制工具svn把web.config当前的代码与最近的一个代码版本一行一行的比较,最终找到了一行。
<applicationInitialization remapManagedRequestsTo="" skipManagedModules="true" doAppInitAfterRestart="true">
而老版本的是
<applicationInitialization remapManagedRequestsTo="" skipManagedModules="false" doAppInitAfterRestart="true">
skipManagedModules是false.心里一动,难道是这里的问题,因为我最近刚碰到过由于applicationInitialization导致的一个问题,而那个问题我解决费了四五个晚上,最终找到就是applicationInitialization的问题。再联想到错误提示是在其模块列表中有一个错误模块。而skipManagedModules设置的是true。意味着在网站初始化的时候跳过管理模块了。改为false,重新编译,这次恼人的错误提示终于不再有了。怕有问题,连续随便修改一个代码行做编译,都不再有这个错误提示。看来问题就是出在这里。这个applicationInitialization 不能使用true.
这里我贴出applicationInitialization设置界面,及skipManagedModules的解释: