【问题标题】:ASP.NET Core deployment to IIS error: Development environment should not be enabled in deployed applicationsASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境
【发布时间】:2016-09-28 03:33:28
【问题描述】:

我按照this article 将我的 ASP.NET MVC Core 1.0 应用程序部署到使用 IIS 10 的 Windows 10 上的本地 IIS。应用程序部署成功,它可以正常打开主页。我正在使用个人用户帐户身份验证。在主页上,当我输入登录名/密码并单击 Login 按钮时,我收到以下错误。我正在使用最新版本的 ASP.NET Core 和 VS2015。我使用 VS2015 发布向导发布应用程序。一切都在同一台机器上完成:

处理您的请求时出错。

开发模式

切换到开发环境将显示有关所发生错误的更详细信息。
不应在已部署的应用程序中启用开发环境,因为它可能导致向最终用户显示异常的敏感信息。对于本地调试,可以通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并重新启动应用程序来启用开发环境。

【问题讨论】:

  • 当你默认发布一个 ASPNETCORE_ENVIRONMENT 变量时,如果没有设置 ASPNETCORE_ENVIRONMENT 变量,它将作为生产,你可以尝试在环境变量或网络中设置 ASPNETCORE_ENVIRONMENT配置到 Development 临时调试正在发生的事情,如果您在生产中使用 appsettings.development.json,如果 enviremoent 变量未设置为“Development”,则不会读取它
  • 顺便说一句,此消息:“不应在已部署的应用程序中启用开发环境,因为它可能导致向最终用户显示来自异常的敏感信息。对于本地调试,可以通过设置启用开发环境ASPNETCORE_ENVIRONMENT 环境变量用于开发,并重新启动应用程序。”不是错误只是警告/建议,但即使已部署,您也可以将其设置为开发
  • 通过发布配置文件解决了环境问题,请参阅stackoverflow.com/a/64368721/1662459
  • 您可以使用 从 EnvironmentVariables xml 块中的 web.config 文件控制环境变量

标签: iis visual-studio-2015 asp.net-core


【解决方案1】:

首先,检查ASPNETCORE_ENVIRONMENT 变量的值。您必须将此环境变量设置为“生产”(或开发以外的其他环境)

否则,你可以像这样更新web.config-

<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\Application.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

更多详情请参考post

【讨论】:

  • 感谢您的帮助。在您的建议的&lt;aspNetCore processPath=".\Application.exe" arguments="" 部分,1. Application 是项目名称还是原样? 2. arguments 值是否需要为空?
  • 1.是的,应用程序是项目 2 的名称。参数只是命令行参数。如果你期待任何,那么你可以通过这里,否则将其留空。
  • 我使用了您在上面发布的 web.config 文件(在将 Application 替换为我的项目名称之后),但我仍然收到上面帖子中显示的相同错误\信息消息。有什么想法\建议吗?
  • 尝试 IIS 重置。也可以尝试使用 ASPNETCORE_ENVIRONMENT = Development 看看会发生什么。
  • @Sunket IISReset 没有帮助。然后我更改为ASPNETCORE_ENVIRONMENT = Development ,在没有启动主页的情况下给了我以下错误。另一方面,如果我在变量值中使用Production,它确实会启动主页,但会在我输入登录名\密码信息并在登录页面上按回车后给我上面帖子中的原始错误\信息消息。 错误500 Internal Server Error System.InvalidOperationException Unable to locate a project.json at 'C:\DotNet2015\PublishToIIS\DeploymentTest\'.
【解决方案2】:

我想在开发环境中运行它,所以我在 web.config 文件中添加了以下内容,它对我有用:

<environmentVariables>
     <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>

【讨论】:

    【解决方案3】:

    如果您使用 ASP.NET CORE 进行开发。您可以在属性中找到此设置,然后在 launchSetting.json 文件中找到。

    "profiles": {
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Production"
          },
          "nativeDebugging": false
        },
        "Ecommerce": {
          "commandName": "Project",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Production"
          },
          "applicationUrl": "https://localhost:5001;http://localhost:5000"
        }
      }
    

    "ASPNETCORE_ENVIRONMENT": "Development" 更改为"ASPNETCORE_ENVIRONMENT": "Production"

    展开属性可以找到launchSetting.json文件

    【讨论】:

    • 启动setting.json文件在哪里?
    • 我已经通过添加显示文件的图像来编辑答案
    • @IlludiumPu36 您是否在所有项目或某些功能上都遇到此错误?
    • 始终...查看此站点,顶部菜单出现错误parakeetbay.com/Students
    • @IlludiumPu36 有时在部署项目后引用本地资源时会发生这种错误。例如数据库连接字符串、图像和其他类型的资产。部署的应用程序不应有任何类型的本地(本地目录)引用。
    【解决方案4】:

    我遇到了同样的问题(ASP.NET CORE 3.1),但更改“ASPNETCORE_ENVIRONMENT”没有帮助。

    在网上搜索我发现在 Startup.cs, Configure 方法中,这段代码隐藏了真正的问题。

     if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    

    然后我删除了 If 块并添加了数据库错误页面(您可能需要从 NuGet 安装 Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore)

    app.UseDatabserrorPages();
    

    所以你的 Startup.cs 看起来像这样

    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
                
    app.UseHttpsRedirection();
    
    //Others will be Okay
    

    然后您将在网页上看到真正的错误。对我来说是

    Login failed for user IIS APPPOOL\DefaultAppPool
    

    所以我不得不运行一个 GRANT SCRIPT。我只需要在我的 SQL Server 上运行这个脚本

    IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
    BEGIN
        CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
          FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
          DEFAULT_LANGUAGE=[us_english]
    END
    GO
    CREATE USER [WebDatabaseUser] 
      FOR LOGIN [IIS APPPOOL\DefaultAppPool]
    GO
    EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
    GO
    

    你可以看到这个链接:https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis

    我的问题就解决了。希望这对某人有所帮助。

    【讨论】:

    • 这完全帮助我解决了我遇到的 Azure 问题...最终需要在主数据库上添加防火墙规则。
    • 这篇文章值得关注,这也是我用来解决开发者页面问题的方法
    【解决方案5】:

    代码中存在运行时异常。在生产模式下无法显示。以便它显示“不应在已部署的应用程序中启用开发环境,因为它可能导致向最终用户显示来自异常的敏感信息

    在 web.config 文件中你会发现

    <aspNetCore processPath="dotnet" arguments=".\PortfolioApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    

    替换为

    <aspNetCore processPath=".\Application.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
          <environmentVariables>
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
          </environmentVariables>
    </aspNetCore>
    

    现在您在浏览器中运行应用程序。它将显示实际的错误消息。现在是时候修复运行时异常了。

    【讨论】:

      【解决方案6】:

      首先,当您发布在运行时引发错误的网站时,会发生此错误。因此,在出现此错误的页面中再次检查您的代码。 然后,将ASPNETCORE_ENVIRONMENT 变量的值设置为Production(而不是Development),您还应该检查布局页面并将&lt;environment"development"&gt; 更改为&lt;environment"Production"&gt;。 最后,发布您的网站。 这是在 VS2017 中测试的

      【讨论】:

        【解决方案7】:

        这可能不是每个人的情况,但是我试图将“发布”配置部署到具有“uat”环境变量的服务器。我设置了一个 uat 配置以用于我的部署,并且在导航到我的站点 url 时不再出现该消息。长话短说,只要确保您的预期构建配置与其他人在上面提到的目标服务器匹配!

        【讨论】:

          【解决方案8】:

          我可以摆脱开发模式消息的唯一方法是更改​​ appsettings.json 上下文 综合安全=真 指定 User Id=username;Password=password 并确保用户是 db_owner。

          【讨论】:

          • 你是对的,它说“用户 'IIS APPPOOL\XXXXX' 登录失败”,我需要为其添加一个新的登录名
          【解决方案9】:

          我刚刚替换了这个:

              if (env.IsDevelopment())
                  {
                      app.UseDeveloperExceptionPage();
                      app.UseMigrationsEndPoint();
                  }
              else
                  {
                      app.UseExceptionHandler("/Error");
                      // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                      app.UseHsts();
                  }
          

          用这个:

               app.UseDeveloperExceptionPage();
               app.UseMigrationsEndPoint();
          

          【讨论】:

            【解决方案10】:

            当您的连接字符串不正确时,您会收到此错误。当我更正我的连接字符串时,它工作正常。

            例如:正确的 azure db 连接字符串

            Server={Server Name};Initial Catalog={Database Name};Persist Security Info=False;User ID={DB User Name};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
            

            【讨论】:

              【解决方案11】:

              默认情况下,在生产中,您将看到此错误页面,除非您创建/自定义自己的页面。根据项目类型,它可以位于不同的位置,例如 Pages/Error.razor 或作为控制器操作。

              【讨论】:

                【解决方案12】:

                【讨论】:

                  【解决方案13】:

                  这是带有一般错误消息的默认错误页面。

                  在共享主机上部署 ASP.NET Core 3.1 MC 发布的应用程序后出现此错误。默认主页和隐私页面按预期工作,但是当我尝试打开从数据库中获取数据的页面时,显示上述错误。

                  错误原因: 在 appsettings.json 中,我将连接字符串 Data Source=MyPC\MSSQLSERVER14 更新为 Data Source=.\MSSQLSERVER2。我从共享主机连接字符串中复制了这个数据源“.\MSSQLSERVER2”并将其粘贴到 appsettings.json 中

                  解决方法:将数据源“.\MSSQLSERVER2”更改为“.\\MSSQLSERVER2”。

                  "ConnectionStrings": { "AppCon": "Data Source=.\\MSSQLSERVER2xxx;Initial Catalog=sqldb;Persist Security Info=True;User ID=sqluser;Password=********" }

                  【讨论】:

                    猜你喜欢
                    • 2021-05-05
                    • 1970-01-01
                    • 2020-07-25
                    • 2023-01-16
                    • 1970-01-01
                    • 2021-04-10
                    • 2016-09-12
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多