在 .NET Framework 4 中运行基于 .NET Framework 3.5 的应用程序出现 HTTP 错误 500.19 - 内部服务器错误
Posted
技术标签:
【中文标题】在 .NET Framework 4 中运行基于 .NET Framework 3.5 的应用程序出现 HTTP 错误 500.19 - 内部服务器错误【英文标题】:running a .NET Framework 3.5-based application in .NET Framework 4 getting HTTP Error 500.19 - Internal Server Error 【发布时间】:2019-01-25 15:49:27 【问题描述】:我已经分配了一项任务来调试以前构建的项目的一些问题。当我在 Visual Studio 13 中运行项目时,我得到了以下信息--
强调这条线--
此错误是因为您正在运行基于 .NET Framework 3.5 的 .NET Framework 4 中的应用程序
我浏览了这篇文章--
.net 3.5 application on .net 4.0 runtime
https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/version-compatibility
https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-configure-an-app-to-support-net-framework-4-or-4-5
Problem with .Net Framework 3.5 applications running in .Net Framework 4
我将下面的代码放在了我的 webconfig 配置部分 --
<startup>
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
但没有任何改变。根据这篇文章——
https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10
我在控制面板中启用了 .net framework 3.5。同样的错误仍然没有希望。谁能建议我如何摆脱这个错误或毫无问题地启动项目?
我的网络配置如下:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<connectionStrings>
<!--conectionstring is here-->
</connectionStrings>
<startup>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
<appSettings>
<add key="webpages:Version" value="2.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="PreserveLoginUrl" value="true"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusivejavascriptEnabled" value="true"/>
</appSettings>
<!--
For a description of web.config changes for .NET 4.5 see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<!--<httpRuntime executionTimeout="5000"/>-->
<httpRuntime maxRequestLength="12288"/>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<authentication mode="None"/>
<pages controlRenderingCompatibilityVersion="4.0">
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/"/>
</providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/"/>
</providers>
</roleManager>
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection"/>
</providers>
</sessionState>
</system.web>
<system.webServer>
<!-- For ModSecurity-->
<validation validateIntegratedModeConfiguration="false"/>
<ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf"/>
<!-- For Videos
<staticContent>
<mimeMap fileExtension=".mp4" mimeType="video/mp4"/>
<mimeMap fileExtension=".m4v" mimeType="video/m4v"/>
</staticContent>-->
<!--<validation validateIntegratedModeConfiguration="false" />-->
<modules runAllManagedModulesForAllRequests="true"/>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
</entityFramework>
</configuration>
【问题讨论】:
【参考方案1】:错误消息指出配置数据无效,这可能与 .NET 4.0 的更新有关,如 Migration Guide to the .NET Framework 4.7, 4.6, and 4.5 的 .NET Framework 4 migration issues 部分所述:
配置文件根配置文件(machine.config 文件和根 Web.config 文件)用于 .NET Framework 和 ASP.NET 4 已更新以包含大部分样板配置 在应用程序 Web.config 文件中找到的信息 ASP.NET 3.5。由于托管 IIS 7 和 IIS 的复杂性 7.5 配置系统,在 ASP.NET 4 和 IIS 7 和 IIS 7.5 下运行 ASP.NET 3.5 应用程序可以导致 ASP.NET 错误或 IIS 错误。通过以下方式将 ASP.NET 3.5 应用程序升级到 ASP.NET 4 使用 Visual Studio 2010 中的项目升级工具。Visual Studio 2010 自动修改 ASP.NET 3.5 应用程序的 Web.config 文件以包含 ASP.NET 4 的适当设置。
但是,您可以使用 .NET Framework 运行 ASP.NET 3.5 应用程序 4 无需重新编译。在这种情况下,您可能必须手动 在运行之前修改应用程序的 Web.config 文件 .NET Framework 4 和 IIS 7 或 IIS 7.5 下的应用程序。这 您必须进行的具体更改取决于软件的组合 您正在使用,包括 Service Pack (SP) 版本。为了 有关受影响的可能软件组合的信息 通过这种变化以及如何解决特定组合的问题, 请参阅“与新 ASP.NET 4 Root 相关的配置错误”部分 配置”在文档ASP.NET 4 Breaking Changes上 ASP.NET 网站。
ASP.NET 4 Breaking Changes 指出两个错误来源:
-
machine.config 和 Web.config 合并不正确
由于版本号不匹配,配置比较失败
另一个选项可能是更改框架规范的顺序,因为它将按照Version Compatibility in the .NET Framework 中所述的首选顺序从上到下使用它们:
所以也许这也可以:
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v4.0" />
</startup>
【讨论】:
【参考方案2】:监控web.config文件内容,发现是下面一行配置导致错误:
<ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf"/>
注释掉那行代码后,错误就修复了。
【讨论】:
它在服务器中运行没有问题。我正在尝试在 Visual Studio 13 中运行这个项目并收到此错误。 好的。我相信您的 web.config 文件中有一些错误。您可以在删除敏感信息后分享您的 web.config,例如数据库连接字符串等 我在你的问题中找不到任何 web.config 你现在在我的问题中找到我的 web.config 了吗? 是的,我注意到以下行:<ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf"/>
。你试过注释掉这一行吗?以上是关于在 .NET Framework 4 中运行基于 .NET Framework 3.5 的应用程序出现 HTTP 错误 500.19 - 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
在 .NET Framework 4.0 的 AppDomain 中运行 codeCom 代码
安装 .net Framework 4.7.2 时,4.5.1 应用程序中的 TLS1.2 协商失败
Phenix Framework 6 for CSLA:基于.NET Framework 4.5 和 CSLA 4.3.14.0 的 开发框架
Phenix Framework 6 for CSLA:基于.NET Framework 4.5 和 CSLA 4.3.14.0 的 开发框架