在IIS 10.0上运行旧ASP.NET应用时出现‘compilers’元素未识别问题
解决迁移至IIS 10后出现的“Unrecognized element 'compilers'”错误
嘿,我之前帮不少人处理过这种跨版本IIS迁移的问题,这个错误其实挺常见的,主要是新旧环境的配置结构和运行模式差异导致的,咱们一步步来解决:
1. 先检查应用程序池的核心设置
原服务器是32位Windows 2003,新服务器是64位Windows 2016,这一步是最容易踩坑的:
- 打开IIS管理器,找到迁移站点对应的应用程序池,右键选择「高级设置」
- 确认
.NET CLR版本设置为v2.0.50727(因为.NET 3.5是基于2.0的CLR运行的,别选错成4.0了) - 把「启用32位应用程序」改成
True,64位IIS默认不加载32位程序,原站点的组件大概率是32位的,必须开这个才能正常运行
2. 修复web.config里的<compilers>元素位置
IIS 6里的web.config结构和IIS 10中ASP.NET 2.0的要求不一样,<compilers>元素不能直接放在<system.web>根节点下,必须嵌套在<compilation>内部:
- 错误的配置结构(IIS 6常见写法):
<system.web> <compilers> <!-- 你的编译器配置 --> </compilers> </system.web> - 改成正确的结构:
<system.web> <compilation debug="false" targetFramework="2.0"> <compilers> <!-- 示例C#编译器配置,根据你的实际情况调整 --> <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v2.0"/> </compiler> <!-- 如果有VB的配置也放在这里 --> </compilers> </compilation> </system.web> - 另外,检查web.config里有没有多余的.NET 4.0相关配置(比如
<system.webServer>里的ASP.NET 4.0模块),如果有的话暂时注释掉,避免版本冲突
3. 确认.NET 3.5和ASP.NET组件安装完整
虽然你用PowerShell装了功能,但有时候可能漏了子组件:
- 打开「服务器管理器」→「添加角色和功能」,找到
.NET Framework 3.5,确保勾选了ASP.NET 3.5这个子功能(这是IIS运行ASP.NET 2.0/3.5站点必须的) - 也可以用PowerShell重新安装补全:
Install-WindowsFeature NET-Framework-Features, Web-Asp-Net -IncludeAllSubFeature
4. 重新映射ASP.NET 2.0到站点
有时候IIS可能没正确关联ASP.NET版本,用命令行重新注册一下:
- 打开32位的命令提示符(路径是
C:\Windows\SysWOW64\cmd.exe,不是默认的64位) - 执行命令:
(站点ID可以在IIS管理器的「站点」列表里看到,比如默认站点是1)%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/[你的站点ID]/ROOT
按上面的步骤排查完,应该就能解决这个错误了。如果还有问题,可以看看事件查看器里的详细错误日志,能帮你定位更具体的配置问题。
内容的提问来源于stack exchange,提问作者John-Rock Bilodeau
相关产品推荐
相关产品推荐

