配置部分 'system.web.extensions' 无法读取,因为它缺少部分声明(发生在代码的特定分支上)

The configuration section 'system.web.extensions' cannot be read because it is missing a section declaration (Happens with a specific branch of Code)

我注意到我每天使用的其中一个 Web 应用程序在今天早些时候出现了问题 运行。代码编译正常,当应用程序启动时 运行ning 我收到 HTTP 响应 500.19 - 内部服务器错误。

Detailed Error Information:

Module     IIS Web Core
Notification       Unknown
Handler    Not yet determined
Error Code     0x80070032
Config Error       The configuration section 'system.web.extensions' cannot be read because it is missing a section declaration
Config File    \?\C:\TFS\Source Control\ManagementSystem\Prod\MS\App\web.config
Requested URL      http://localhost:40095/Ship/AddEditOrder.aspx
Physical Path      
Logon Method       Not yet determined
Logon User     Not yet determined
Request Tracing Directory      C:\Users\{User}\Documents\IISExpress\TraceLogFiles\

在此下方我看到以下内容:

更多信息:

This error occurs when there is a problem reading the configuration file for the Web server or Web application. In some cases, the event logs may contain more information about what caused this error.

If you see the text "There is a duplicate 'system.web.extensions/scripting/scriptResourceHandler' section defined", this error is because you are running a .NET Framework 3.5-based application in .NET Framework 4. If you are running WebMatrix, to resolve this problem, go to the Settings node to set the .NET Framework version to ".NET 2". You can also remove the extra sections from the web.config file.

这听起来像是 IIS 的问题,我已经检查了针对此问题的建议解决方案,如下所示:

最后一篇文章看起来最有希望,但我无法找到我尝试的应用程序的任何踪迹 运行。

我终于解决了这个!

该消息有点误导,但在将这些点与其中一些文章联系起来后,我想出了以下解决方案。看来我的本地解决方案已经为特定 "site" prior 保存了它自己的 IIS 设置到我们的 .Net Framework 从 3.5 升级到4.0。换句话说,IIS 条目有一个陈旧的应用程序池框架声明。

其中许多文章都提到需要更改 IIS Express 设置,这些设置通常会将您指向基于用户的文件夹目录,例如

C:\Users\User\Documents\IISExpress\config\applicationhost.config

然而,正如我在原始 post 中提到的,这里没有我的任何项目的残余。

我一直在挖掘,发现解决方案本身实际上也保留了这些设置的本地副本!您可以在本地项目解决方案附近的 ".vs" 文件夹中找到它们!

示例:

C:\TFS\Source Control\WMS\Prod\WMS.vs\config\applicationhost.config

从那里我找到了有问题的网站

<site name="WHSMGMTApp" id="3">
                <application path="/" applicationPool="Clr2IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="C:\TFS\Source Control\WMS\Prod\WMS\WHSMGMTApp" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:40095:localhost" />
                </bindings>
            </site>

我导航到我网站的应用程序池节点,发现它仍在 .Net 版本 2.0 上,但它需要是 4.0。

寻找 "Application Pools" 节点并找到您的应用程序池

在我的例子中是 Clr2IntegratedAppPool

   <applicationPools> 
<add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            </applicationPools>

我将 managedRuntimeVersion 从 "v2.0" 更改为 "v4.0" 并且成功了!

这似乎是一个非常小众的场景,您已经在解决方案中升级了 .Net Framework,并且您已经拥有针对特定代码分支的 Local IIS Express 条目。 (这解释了为什么我的 QA 分支在工作而不是我的 Prod 分支,因为它们在 .config 文件中有单独的条目)

任何关于 为什么 visual studio 需要它自己的 .config 版本的任何见解都是受欢迎的!