【问题标题】:ASP.NET Core ignoring ASPNETCORE_ENVIRONMENT variableASP.NET Core 忽略 ASPNETCORE_ENVIRONMENT 变量
【发布时间】:2019-08-13 21:28:14
【问题描述】:

我知道其他人已经发布了这个问题,但我看到的解决方案都没有出现在我的案例中。我有一个 ASP.NET WebAPI 应用程序。我已经能够通过 Visual Studio Publish 将它发布到两个不同的开发服务器。在两个目标服务器上,我通过 Windows GUI 将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并且应用程序会选择它,使用我的 appSettings.Development.json 设置,并按预期工作。

现在我将它部署到我的测试服务器。在该服务器上,我通过 Windows GUI 将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Test,但是当应用程序运行时,它总是显示 Hosting Environment: Production。我已经按照一篇文章的建议检查了我的 launchSettings.json 文件,但其中没有任何内容将环境变量设置为生产。由于 Production 是默认设置,因此我没有在任何地方设置该值的代码。

我成功部署到我的开发服务器和我失败的部署到我的测试服务器都是通过从 Bamboo 执行的 dotnet publish 完成的。 我不知道为什么在我的测试服务器上运行的应用程序没有选择 ASPNETCORE_ENVIRONMENT 测试设置。

我在周末想到的其他一些细节可能相关也可能不相关。

VS Publish to Windows Server 2008 R2,调试版本,按预期工作。目标服务器将 ASPNETCORE_ENVIRONMENT 设置为 Development,应用程序日志报告 Hosting environment: Development,并且 appSettings.Development.json 设置生效。

VS Publish 和 Bamboo 都部署(通过 dotnet publish)到 Windows Server 2016,调试版本,按预期工作。我在此服务器上有两个站点实例。一个依赖于 ASPNETCORE_ENVIRONMENT 变量,该变量设置为 Development,并按预期工作。另一个通过 applicationHost.config 中的设置覆盖其应用程序池的环境变量。在这两种情况下,应用程序都会正确选择环境变量并反映正确的托管环境。

Bamboo 通过 dotnet 发布部署到 Windows Server 2012,发布版本,无法按预期工作。应用程序将托管环境报告为生产环境(默认),表明它未能获取我设置的环境变量。应用程序失败,因为它缺少 appSettings.Development.json 中的应用程序设置。

所以失败的场景是不同的服务器操作系统,但由于它适用于 2008 年和 2016 年,我认为它适用于 2012 年。失败的场景是发布版本与调试版本,但我不会认为这会影响运行时行为重新配置。

我认为这不是 launchSettings.json 问题,因为这可能会影响我的所有目标部署,而不仅仅是我的测试服务器。我已经通过命令行确认环境变量设置正确。我真的不想要基于 web.config 的解决方案,我认为我不应该需要它并且需要特定于环境的转换。

我尝试过的其他一些没有帮助的事情: 将构建类型从 Release 更改为 Debug(因为它在工作环境中是 Debug)。还是不行。 尝试记录其他环境变量,但应用程序在到达我的日志记录代码之前就死了。还在做这个... 尝试像我在开发服务器上所做的那样在 applicationHost.config 中设置环境变量,但测试服务器是 Windows Server 2012 和 IIS 8,并且不支持 applicationHost.config 中的元素。 (开发服务器是 Windows Server 2016 和 IIS 10,它确实支持 applicationHost.config 中的元素。) 尝试过 VS Publish 与 Bamboo 部署。还是不行。 我比较了开发和测试服务器上的 .NET Core 安装。两者都有主机版本 2.2.3,相同的提交。开发服务器已安装 SDK;测试服务器没有。开发服务器安装了多个运行时版本,最新的是 2.2.3。测试服务器只安装了 2.2.3 运行时。主要区别似乎是 SDK,我认为我不需要安装 SDK 来读取环境变量。

【问题讨论】:

  • 能否在测试环境中运行一个小脚本来验证环境变量是否设置为正确的值?
  • 如果我在命令提示符下键入 echo %ASPNETCORE_ENVIRONMENT%,我会得到结果:开发。所以我相信环境变量设置正确。另外,我可以打开 Windows 环境变量 GUI 并在系统环境变量列表中查看它。
  • 你有没有想过这个问题?

标签: windows .net-core environment-variables


【解决方案1】:

我想我之前已经解决了这个问题。我必须在我的 IIS 应用程序池高级设置中将 LoadUserProfile 设置为 True。我不确定为什么这是真的,因为我读过的东西说你需要这个来读取 user 环境变量,而我的应用程序无法读取 system 环境变量.但是,无论如何,当我在 IIS 应用程序池上将 LoadUserProfile 设置为 true 时,应用程序会正确读取 ASPNETCORE_ENVIRONMENT 系统环境变量,并且应用程序会按预期工作。

【讨论】:

  • 有谁知道为了让在 IIS 中运行的 ASP.NET Core 应用程序通过环境变量配置提供程序加载配置,您需要将 IIS 应用程序池 LoadUserProfile 设置为 true,这是否属实?好像是这样的。这在任何地方都有记录吗?
  • 这对我来说似乎也是如此。使用默认设置,它没有选择全局环境变量。在看到您的评论并更改应用程序池设置和回收后,它确实做到了。
  • StackOverflow 再次拯救了这一天。谢谢!否则我永远不会找到这个解决方案。
【解决方案2】:

您是否尝试在网络配置中设置此值?

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

【讨论】:

  • 我希望不必在 web.config 中设置环境变量,因为我需要为每个环境转换 web.config。我对 .NET Core 架构的理解是它正在远离这种方法。我已经设置了特定于环境的 appSettings.json 文件,但它们当然依赖于按设计工作的环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2018-08-07
  • 2021-01-29
  • 2018-05-19
  • 2016-02-12
相关资源
最近更新 更多