【发布时间】:2011-03-24 04:09:10
【问题描述】:
尝试在 IIS7 中的默认应用程序池上部署 .net 3.5 网站并将框架部分设置为 4.0 时,我收到以下错误。
有一个重复 “system.web.extensions/scripting/scriptResourceHandler”部分 已定义。
评论有问题的行也无济于事。关于我需要做什么或看什么的任何指示?
【问题讨论】:
标签: asp.net deployment iis-7
尝试在 IIS7 中的默认应用程序池上部署 .net 3.5 网站并将框架部分设置为 4.0 时,我收到以下错误。
有一个重复 “system.web.extensions/scripting/scriptResourceHandler”部分 已定义。
评论有问题的行也无济于事。关于我需要做什么或看什么的任何指示?
【问题讨论】:
标签: asp.net deployment iis-7
如果您的计划是部署到具有在 .net 4.0 中运行的应用程序池的 IIS,您将需要清理包含所有指向 .net 3.5 的定义部分的 web.config。失败的原因是因为这些节定义已经包含在 .NET 4.0 的根 web.config 中(请参阅 %windir%\microsoft.net\framework\v4.0.30319\config\machine.config),其中包括所有系统。 web.extensions 已经声明。
另一个快速解决方法是将应用程序池设置为 2.0,就像您的开发机器看起来一样。
【讨论】:
如果像我一样,您需要以 v4 为目标,但只能使用 .net 3.5 构建,请按照说明进行操作 here。只需在您的 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>
【讨论】:
将应用程序池设置为2.0,我做到了并且工作了。
【讨论】:
死灵术。
如果您的 web.config 中没有任何 system.web.extensions 配置部分或处理程序/模块条目,则导致此问题是因为您/其他人复制了 VisualStudio-Project (2013/2015/2017) 同时有隐藏文件未隐藏。
因此,它不仅会复制 .git,还会复制 .VS,其中包含一个 IIS-Express applicationhost.config 文件,指向 web.config 文件位于不存在的路径(或者更糟的是,确实存在但内容不同的路径)...
解决方案:
删除 .VS 文件夹中的 applicationhost.config 文件。
或者干脆删除 .VS 文件夹。
Visual Studio 将重新创建它。
【讨论】:
我的应用是 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 处理程序。使用以下步骤:
【讨论】:
Apparently, other have (had) this problem。它们在 Framework 4.0 中重建。可以吗?
【讨论】:
在我的情况下,它发生在我将整个解决方案(使用名为 Target Framework Migrator 的扩展)转换为 4.6.2 但最终撤消更改并返回到 3.5(解决方案由 TFS 版本控制)之后。 为了解决这个问题,我只将有问题的项目(使用 IIS Express 运行)转换为 4.6.2,然后再转换回 3.5。
【讨论】:
避免此问题的另一种可能对其他人有所帮助的方法是将您的 .net Web 服务构建到 4.0 或更高版本(如果可能)。
【讨论】:
就我而言,我有 2 个不同的应用程序共享同一个应用程序池。第一个使用 .net4.5 框架,新的使用 2.0。当我将第二个应用程序更改为它自己的应用程序池时,它开始正常工作,无需更改 web.config。
【讨论】:
我的决定有点愚蠢。
我安装了 .net 3.5 的副本
创建了另一个应用程序池并选择了 .net 3.5(它说 2.0.5077 in 下拉菜单)
将我的网站添加到该应用程序池中
回收了新旧水池,站点开始工作。
这归结为我没有安装 3.5,即使打开 Windows 功能说我安装了并创建了另一个应用程序池来使用。我希望这对其他人有所帮助。
【讨论】:
就我而言,我想手动添加 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>
【讨论】:
此错误消息似乎出现在各种情况下。
就我而言,在我的应用程序的 Web.Config 文件之上,我在根文件夹 (C:\Inetpub\www.root) 中有一个额外的 Web.Config 文件。可能是经过一些测试后离开的,我已经完全忘记了,也不知道是什么问题。
删除它为我解决了问题。
【讨论】:
这可能是你的错误答案。但是当我试图解决我的问题时,这是对谷歌的第一次打击。话虽如此......
我也出现了同样的错误消息,但是当我尝试通过 Visual Studio 运行 IIS Express 时。
我的问题是我错误地将 applicationhost.config 提交到 TFS。后来,当我在获得最新提交后尝试在笔记本电脑上运行该项目时。这就是错误发生的时候。
发现虚拟目录路径不对。
<virtualDirectory path="/" physicalPath="C:\Users\user1\Documents\Visual Studio 2015\Projects\ProjectName\ProjectName\ProjectName.Web" />
希望这对某人有所帮助!
这是我的第一篇文章,所以要温柔:)
【讨论】: