在.NET Framework 4中运行基于.NET Framework 3.5的应用程序得到HTTP错误500.19-内部服务器错误

时间:2018-08-19 06:27:36

标签: c# asp.net .net-4.0 .net-3.5 .net-framework-version

我已分配任务来调试先前构建项目的某些问题。当我在Visual Studio 13中运行项目时,我看到了-

enter image description here

强调这一行-

  

此错误是因为您正在运行基于.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。同样的错误仍然没有希望。谁能建议我如何摆脱这个错误或毫无问题地启动项目?

我的Web配置如下:

<?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>

2 个答案:

答案 0 :(得分:1)

监视web.config文件的内容后,发现以下配置行导致了错误:

<ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf"/>

注释掉该行代码后,该错误已解决。

答案 1 :(得分:0)

错误消息指出配置数据无效,这可能与.NET Framework 4 migration issuesMigration Guide to the .NET Framework 4.7, 4.6, and 4.5部分所述的.NET 4.0更新有关:

  

配置文件根配置文件(machine.config   .NET Framework和ASP.NET的文件和根Web.config文件)   已更新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根相关的配置错误”部分   配置”中的文档ASP.NET 4 Breaking Changes   ASP.NET网站。

ASP.NET 4 Breaking Changes指出两种错误来源:

  1. machine.config和Web.config错误合并
  2. 由于版本号不匹配,配置比较失败

另一种选择可能是更改框架规范的顺序,因为它将按照Version Compatibility in the .NET Framework中所述的优选顺序从上到下使用它们:

所以也许这也会起作用:

<startup>
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
</startup>