ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境
Posted
技术标签:
【中文标题】ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境【英文标题】:ASP.NET Core deployment to IIS error: Development environment should not be enabled in deployed applications 【发布时间】: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 环境变量用于开发,并重新启动应用程序。”不是错误只是警告/建议,但即使已部署,您也可以将其设置为开发 通过发布配置文件解决了环境问题,请参阅***.com/a/64368721/1662459 您可以使用首先,检查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.是的,应用程序是项目 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
),您还应该检查布局页面并将<environment"development">
更改为<environment"Production">
。
最后,发布您的网站。
这是在 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】:对我来说,只需将 EnvironmentName 属性添加到 pubxml。
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-5.0
【讨论】:
【参考方案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=********"
【讨论】:
以上是关于ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境的主要内容,如果未能解决你的问题,请参考以下文章
将 asp.net core web api 部署到 IIS 7.5 时出现 500 错误
ASP .NET Core IIS 部署 IIS AspNetCore 模块错误:CLR 工作线程过早退出