Asp.net

升級到 .NET 4.0 時 <system.web.extensions> 配置組出現問題

  • July 15, 2020

所以我們已經從 3.5 SP1 -> .NET 4 升級了我們的網站。

當我們執行該站點時,我們收到一個內部伺服器錯誤 (500),說明無法讀取以下配置組:

&lt;system.web.extensions&gt;
       &lt;scripting&gt;
           &lt;scriptResourceHandler enableCompression="true" enableCaching="true" /&gt;
           &lt;webServices&gt;
               &lt;jsonSerialization maxJsonLength="999999" /&gt;
           &lt;/webServices&gt;
       &lt;/scripting&gt;
   &lt;/system.web.extensions&gt;

我們註釋掉了這一部分,網站執行良好(但現在我們遇到了 JSON 的問題——因為上述必需的屬性)。

我們已經閱讀了有關此問題的執行緒,其中大多數都說“您的應用程序池未執行 4.0”。它是,所以這不是問題。

我也讀過執行緒說 IIS 正在以某種方式讀取舊的 machine.config 文件。

如您所知,在 .NET 4 中,web.config 的許多部分已移至 machine.config。

所以我們把這部分放回 web.config 的頂部:

&lt;sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&gt;
           &lt;sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&gt;
               &lt;section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/&gt;
               &lt;sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"&gt;
                   &lt;section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" /&gt;
                   &lt;section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&gt;
                   &lt;section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&gt;
                   &lt;section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" /&gt;
               &lt;/sectionGroup&gt;
           &lt;/sectionGroup&gt;
       &lt;/sectionGroup&gt;

現在該網站似乎工作正常。

不過,我有點擔心這是否是正確的解決方案。

任何想法的人?這是正確的解決方法嗎?

編輯:

3 週,沒有答案……該死的。=)

由於我沒有答案,而且廣泛的Google搜尋也沒有得到任何愛,我決定堅持我的原始修復(將 system.web.extensions 部分添加回 web.config)。

我最近遇到了這個問題,經過一些故障排除後能夠解決它。希望我所做的也能幫助解決您的問題。1. 確保您為該站點執行的應用程序池正在使用 .NET 4 管道 2. 在記事本中打開您的 .csproj(或 .vbproj,如果您的項目是 VB 項目)並遍歷文件並檢查是否有任何硬編碼對 v2.0 框架文件的引用。在我的情況下,我們有一個使用 v2.0 編譯器路徑的“建構後”任務,它強制應用程序仍然使用 2.0 執行時。就像下面一樣。

&lt;Target Name=”AfterBuild” Condition=”’$(MvcBuildViews)’==’true’”&gt;
&lt;AspNetCompiler Condition=”’$(IsDesktopBuild)’ != ‘false’” VirtualPath=”temp” ToolPath=”$(WINDIR)\Microsoft.NET\Framework\v2.0.50727” PhysicalPath=”$(ProjectDir)\..\$(ProjectName)” /&gt;
&lt;AspNetCompiler Condition=”’$(IsDesktopBuild)’ == ‘false’” VirtualPath=”temp” ToolPath=”$(WINDIR)\Microsoft.NET\Framework\v2.0.50727” PhysicalPath=”$(OutDir)\_PublishedWebsites\$(ProjectName)” /&gt;

確保將它們更改為 v4.0 或更好地使它們可配置。希望有幫助。

-Vamsi

引用自:https://stackoverflow.com/questions/3209192