gpt4 book ai didi

windows - ASP.NET Core忽略ASPNETCORE_ENVIRONMENT变量

转载 作者:行者123 更新时间:2023-12-03 11:06:02 26 4
gpt4 key购买 nike

我知道其他人已经发布了这个问题,但是我所见的解决方案都没有出现。我有一个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。由于Production是默认设置,因此我没有在任何地方设置该值的代码。

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

我在周末想到的其他一些细节可能无关紧要。

VS Publish to Windows Server 2008 R2,调试版本,按预期方式工作。目标服务器的ASPNETCORE_ENVIRONMENT设置为Development,应用程序日志报告托管环境:Development和appSettings.Development.json设置有效。

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

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

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

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

我尝试过的其他一些操作没有帮助:
将构建类型从“发行版”更改为“调试”(因为在工作环境中为“调试”)。仍然不起作用。
尝试记录其他环境变量,但是应用程序在进入我的记录代码之前就死了。仍在努力中...
尝试像在开发服务器上一样在applicationHost.config中设置环境变量,但是测试服务器是Windows Server 2012和IIS 8,并且不支持applicationHost.config中的元素。 (Dev服务器是Windows Server 2016和IIS 10,它确实支持applicationHost.config中的元素。)
尝试使用VS发布与Bamboo部署。仍然不起作用。
我比较了开发服务器和测试服务器上的.NET Core安装。两者都有主机版本2.2.3,相同的提交。开发服务器已安装SDK;测试服务器没有。 Dev服务器已安装多个运行时版本,最新版本为2.2.3。测试服务器仅安装了2.2.3运行时。主要区别似乎在于SDK,我认为我不需要安装SDK即可读取环境变量。

最佳答案

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

关于windows - ASP.NET Core忽略ASPNETCORE_ENVIRONMENT变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com