IIS7 deployment - duplicate 'system.web.extensions/scripting/scriptResourceHandler' section
On attempting to deploy a .net 3.5 website on the default app pool in IIS7 having the framework section set to 4.0, I get the following error.
There is a duplicate 'system.web.extensions/scripting/scriptResourceHandler' section defined.
Commenting off the offending lines didn't help either. Any po开发者_开发技巧inters on what I need to do or look at?
If your plan is to deploy to an IIS that has an Application Pool running in .net 4.0 you will need to cleanup the web.config that includes all the section Definitions that point to .net 3.5. The reason this fails is because these section definitions are already included in the root web.config in .NET 4.0 (see %windir%\microsoft.net\framework\v4.0.30319\config\machine.config) that include all the system.web.extensions declared already.
Another quick fix is to have the application pool set to 2.0 just as your development machine appears to have,.
The solution for me was to change the .NET framework version in the Application Pools from v4.0 to v2.0 for the Default App Pool:
If, like me, you need to target v4 but can only build with .net 3.5, follow the instruction here. Just replace in your web.config the whole content of the <configSections>
with:
<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>
Set the application pool to 2.0, I did it and worked.
Necromancing.
If you don't have any system.web.extensions config-sections or handler/module entries in your web.config, this problem is caused because you/somebody else copied a VisualStudio-Project (2013/2015/2017) while having hidden-files unhidden.
Because of that, it will not only copy .git, but also .VS
, which contains an IIS-Express applicationhost.config file, which points to web.config files at paths that don't exist (or worse, paths that do exist, but do not have the same content)...
Solution:
Delete the applicationhost.config file in the .VS folder.
Or just delete the .VS folder altogether.
Visual Studio will re-create it.
My app was an ASP.Net3.5 app (using version 2 of the framework). When ASP.Net3.5 apps got created Visual Studio automatically added scriptResourceHandler to the web.config. Later versions of .Net put this into the machine.config. If you run your ASP.Net 3.5 app using the version 4 app pool (depending on install order this is the default app pool), you will get this error.
When I moved to using the version 2.0 app pool. The error went away. I then had to deal with the error when serving WCF .svc :
HTTP Error 404.17 - Not Found The requested content appears to be script and will not be served by the static file handler
After some investigation, it seems that I needed to register the WCF handler. using the following steps:
- open Visual Studio Command Prompt (as administrator)
- navigate to "C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation"
- Run servicemodelreg -i
Apparently, other have (had) this problem. They rebuild in Framework 4.0. Can you?
Also, see this about making sure your IIS is fresh.
In my case it happened after I converted the whole solution (using an extension called Target Framework Migrator) to 4.6.2 but ended up undoing the changes and going back to 3.5 (solution is versioned by TFS). To solve this, I converted just the problematic project (which was using IIS Express to run) to 4.6.2 and then back to 3.5.
Another way to avoid this problem that may help others is build your .net web service to version 4.0 or higher if possible.
In my case I had 2 different apps sharing the same app pool. The first one was using the .net4.5 framwork and the new one was using 2.0. When I changed the second app to it's own app pool it starting working fine with no changes to the web.config.
My resolution was kind of stupid.
I installed a copy of .net 3.5
Created another app pool and selected .net 3.5 (it says 2.0.5077 in the drop down)
Added my website to that app pool
Recycled the old and new pools and the site started working.
It came down to me not having 3.5 installed even though the turn on windows features said I did and creating another app pool to use. I hope this helps others.
In my case I wanted to manually add urlrewrite rule and couldn't see the obvious error (I missed <rules>
tag):
wrong code:
<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>
proper code (with rules tag):
<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>
I've solved it, doing the following steps:
- I created a new application's group in IIS.
- Open advanced settings for the site or web application that is having this problem.
- And set the new application's group.
Here you have the images of these steps:
This error message seems to come up in various situations.
In my case, on top of my application's Web.Config file I had an extra Web.Config file in the root folder (C:\Inetpub\www.root). Probably left there after some testing, I had forgotten all about it, and couldn't figure out what the problem was.
Removing it solved the problem for me.
This is maybe the wrong answer for you. But this was the first hit on Google when I tried to solve my problem. With that said...
The same error message occurred for me as well, but when I tried to run IIS Express through Visual Studio.
My problem was that I mistakenly commited my applicationhost.config to TFS. Later when I tried to run the project on my laptop after getting the latest commits. that's when the error occurred.
I found that the virtual directory path was wrong.
<virtualDirectory path="/" physicalPath="C:\Users\user1\Documents\Visual Studio 2015\Projects\ProjectName\ProjectName\ProjectName.Web" />
Hope that this help somebody!
This is my first post, so be gentle :)
精彩评论