IIS7部署 - 重复的'system.web.extensions/scripting/scriptResourceHandler'部分

233

尝试将一个 .net 3.5 网站部署到 IIS7 的默认应用程序池中,当设置 framework 属性为4.0 时,会出现以下错误:

有一个重复的 'system.web.extensions/scripting/scriptResourceHandler' 部分被定义。

注释掉有问题的行也没有帮助。请问我需要做什么或查看哪些方面?

15个回答

367
如果您计划部署到运行在.NET 4.0中的应用程序池(Application Pool)的IIS上,您需要清理包含所有指向.NET 3.5的部分定义的web.config。之所以会失败,是因为这些部分定义已经包含在.NET 4.0的根web.config中(请参阅%windir%\microsoft.net\framework\v4.0.30319\config\machine.config),其中已经声明了所有system.web.extensions。

另一个快速解决方法是将应用程序池设置为2.0,就像您的开发机器一样。


3
谢谢您的解释。我一直看到从配置文件中删除一个部分的解决方案,但我在想,“删除配置文件的部分怎么能成为解决方案呢?” - Adam Bruss
19
我的应用程序池被设置成了4.0而不是2.0! - RolandoCC
自从myApp首次部署以来,它不是一个应用程序,而是一个虚拟目录。我必须进入默认网站并将虚拟目录转换为应用程序。 - apacay
1
太容易了,将这个旧网站切换到2.0应用程序池,哇,它就能工作了!谢谢! - mgrenier
1
只需在 web.config 文件中删除 .net 3.5 部分即可解决我的问题。 - Anand
显示剩余5条评论

58

对我来说,解决方案是将默认应用程序池中的.NET框架版本从v4.0更改为v2.0:

输入图像描述


13
如果你的应用程序实际上使用的是 .NET 4.0,那么呢? - Michael Paulukonis
3
@MichaelPaulukonis 我曾经遇到过这个问题,后来发现根网站中有一个 web.config 文件,而我的网站是从它那里继承的。 - FarFigNewton
@MichaelPaulukonis,呵呵,这怎么可能发生! - DaveDev
我的应用程序从3.5升级到4.0时出现了这个问题,应用程序池已经正确更新,但是web.config已经过时。Web.config试图添加所有那些自4.0以来已经成为本地且不需要显式添加的部分组。 - drizin

55

如果像我一样,您需要针对v4进行目标定位,但只能使用.net 3.5进行构建,请按照此处的说明操作。只需用以下内容替换web.config中<configSections>的全部内容:

<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions,  Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
    </sectionGroup>
  </sectionGroup>
</sectionGroup>

:一个空段落。

4
你的解决方案是唯一解决我的问题的方法!非常感谢! - Devdatta Tengshe
1
这也解决了我的问题。服务器已经升级了,从IIS6到IIS7.5。在IIS6上它是运行在v4.0下,但是IIS7.5需要进行这个web.config的改变。 - johna
这太棒了。 - mzonerz
PublicKeyToken 中的值是区分大小写的(应该与答案中的一样)。我的是大写的,但不起作用。 - Björn

3

将应用程序池设置为2.0,我做了并且有效。


3

死灵法术。
如果你的web.config中没有system.web.extensions配置部分或处理程序/模块条目,则这个问题是由于你/其他人复制了一个VisualStudio项目(2013/2015/2017),同时取消隐藏了隐藏文件导致的。

因此,它不仅会复制.git,还会复制.VS文件夹,其中包含一个IIS-Expressapplicationhost.config文件,它指向不存在的路径下的web.config文件(或更糟糕的是指向存在但内容不同的路径)...

解决方案:
删除.VS文件夹中的applicationhost.config文件。
或者干脆删除整个.VS文件夹。
Visual Studio将重新创建它。


优秀的解释 - William Bello

2
我的应用程序是一个ASP.Net3.5应用程序(使用版本2的框架)。当创建ASP.Net3.5应用程序时,Visual Studio会自动将scriptResourceHandler添加到web.config中。较新版本的.Net将它放入了machine.config中。如果您使用版本4应用程序池运行ASP.Net 3.5应用程序(取决于安装顺序,这是默认应用程序池),则会出现此错误。
当我改用版本2.0应用程序池时,错误消失了。然后我需要处理为WCF .svc提供服务时出现的错误:
HTTP错误404.17 - 未找到所请求的内容似乎是脚本,并且静态文件处理程序不会提供服务
经过一些调查,发现我需要注册WCF处理程序。按照以下步骤进行:
1. 以管理员身份打开Visual Studio命令提示符 2. 导航至"C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation" 3. 运行servicemodelreg -i


1
在我的情况下,这是发生在我使用一个叫做目标框架迁移工具的扩展将整个解决方案转换为4.6.2之后,但最终撤销了更改并回到了3.5(解决方案由TFS进行版本管理)。为了解决这个问题,我只将有问题的项目(使用IIS Express运行)转换为4.6.2,然后再转换回3.5。

谢谢。看起来回滚和撤销更改将无法正确地将应用程序恢复到.NET 3.5状态。 - Iman

0
在我的情况下,我想手动添加urlrewrite规则,但是无法看到明显的错误(我错过了<rules>标签):
错误代码:
    <rewrite>
      <rule name="some rule" stopProcessing="true">
        <match url="some-pattenr/(.*)" />        
        <action type="Redirect" url="/some-ne-pattenr/{R:1}" />
      </rule>
    </rewrite>    

  </system.webServer>
</configuration>

正确的代码(带有规则标签):

    <rewrite>
      <rules>
        <rule name="some rule" stopProcessing="true">
          <match url="some-pattenr/(.*)" />        
          <action type="Redirect" url="/some-ne-pattenr/{R:1}" />
        </rule>
      </rules>
    </rewrite>

  </system.webServer>
</configuration>

0

这个错误信息似乎在各种情况下都会出现。

在我的情况下,在我的应用程序的 Web.Config 文件之上,我在根文件夹(C:\Inetpub\www.root)中有一个额外的 Web.Config 文件。可能是在一些测试后留下来的,我已经忘记了所有关于它的事情,并且无法弄清楚问题所在。

将其删除解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接