ChatGPT解决这个技术问题 Extra ChatGPT

ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境

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

C
Community

首先,检查 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


感谢您尝试提供帮助。在您建议的 <aspNetCore processPath=".\Application.exe" arguments="" 部分中,1. Application 是项目名称还是原样? 2. arguments 值是否需要为空?
1. 是的,Application 是项目的名称 2. 参数不过是命令行参数。如果您期待任何,那么您可以通过这里,否则将其留空。
我使用了您在上面发布的 web.config 文件(在用我的项目名称替换 Application 之后),但我仍然收到上面帖子中显示的相同错误\信息消息。任何想法\建议?
尝试 IIS 重置。也尝试使用 ASPNETCORE_ENVIRONMENT = Development 看看会发生什么。
我不明白为什么这个向后的答案有 30 个赞成票。该消息告诉他切换到开发以查看更多调试信息,而不是生产。
M
Mustapha Larhrouch

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

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

https://i.stack.imgur.com/GqIGm.png


A
Abdulhakim Zeinu

如果您正在使用 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文件

https://i.stack.imgur.com/g9HtS.png


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

我遇到了同样的问题(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 问题……最终需要在主数据库上添加防火墙规则。
这篇文章值得更多关注,这也是我用来解决开发者页面问题的方法
A
Aminur Rahman

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

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

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


A
Adrian Mole

我刚刚替换了这个:

    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();

N
Nick

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


f
francoisr

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


J
Judy M

我可以摆脱开发模式消息的唯一方法是将 appsettings.json 上下文从 Integrated Security=True 更改为指定 User Id=username;Password=password 并确保用户是 db_owner。


你是对的,它说“用户'IIS APPPOOL \ XXXXX'登录失败”,我需要为其添加一个新的登录名
J
Janaka

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

例如:对于正确的 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;

D
Dan Friedman

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


J
Jared Tims
S
Syed Nasir Abbas

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

在共享主机上部署 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=********" }