在 .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 了吗? 是的,我注意到以下行:&lt;ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf"/&gt;。你试过注释掉这一行吗?

以上是关于在 .NET Framework 4 中运行基于 .NET Framework 3.5 的应用程序出现 HTTP 错误 500.19 - 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

net framework 4.0 能运行在啥系统上

net framework 4.0安装不了 拒绝访问

在 .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 的 开发框架