IIS添加托管本地HttpModule时报错:无法执行程序问题咨询
IIS10添加自定义HttpModule时报Roslyn编译器错误解决方案
报错原文:
添加托管模块:
执行此操作时出现错误
无法执行程序。所执行的命令为c:\...\bin\roslyn\csc.exe/shared /keepalive:"10" /noconfig /fullpathes @'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\u8mj01d2\qwerty.cmdline'
核心原因
该错误是IIS运行时调用Roslyn动态编译器执行动态编译时触发,常见诱因包括编译器文件缺失、权限不足、应用池配置不匹配、HttpModule本身代码问题四类。
分步修复方案
校验Roslyn编译器文件完整性
确认站点bin/roslyn目录下所有文件完整无缺失。如果是通过NuGet引入的Roslyn编译器,先卸载再重装对应包确保文件发布正确:Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform配置对应目录权限
给站点根目录添加对应应用池用户IIS AppPool\你的应用池名称的读取&执行权限,同时给C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files目录授予该用户的完全控制权限。调整应用池配置
打开对应应用池的高级设置页:- 确认
.NET Framework版本设置为v4.0,和项目编译版本一致 - 按项目生成平台设置
启用32位应用程序,64位/Any CPU项目设为False,32位项目设为True - 临时将应用池
标识修改为LocalSystem测试,如果报错消失则确认是权限问题,再回退配置细化权限即可
- 确认
回退系统编译器(应急方案)
若以上方案暂时无法生效,可先移除web.config中system.codedom节点下所有Roslyn相关的provider配置,回退使用系统自带编译器,确认HttpModule可正常注册后再排查编译器问题。检查HttpModule代码
确认自定义HttpModule类为public修饰,且正确实现了IHttpModule接口,编译无报错,生成的dll已正确放置到站点bin目录。
内容的提问来源于stack exchange,提问作者Hamedb
相关产品推荐
相关产品推荐

