Asp.Net Core Hosting环境变量被忽略

Tha*_*den 12 environment-variables asp.net-core

我的登台服务器上有两个网站,都是在IIS中运行的Asp.net核心网站.我已将环境变量设置ASPNETCORE_ENVIRONMENTStaging机器范围.这适用于其中一个站点,但另一个忽略变量并在生产模式下运行.我必须将托管环境配置到web.config文件中以在分段模式下运行它.

关于为什么一个站点不考虑环境变量的任何提示?

编辑:在我的两个Startup(IHostingEnvironment env)构造函数中,我使用环境变量:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddJsonFile("logging.json")
        .AddEnvironmentVariables();  //   <---
        Configuration = builder.Build();
    } 
Run Code Online (Sandbox Code Playgroud)

Tha*_*den 17

正如在这个类似的问题中所说,诀窍就是设置应用程序池以加载用户变量(IIS - >服务器 - >应用程序池 - >右键单击池 - >设置应用程序池默认值... - >加载用户配置文件=真).

我相应地只配置了一个应用程序池,因此只有一个站点可以访问环境变量.

  • 也为我工作。我想知道为什么将环境变量设置为机器变量不起作用.. (3认同)

小智 13

我刚刚花了几个小时处理同样的问题.我不确定结果是否会相同,因为您似乎有两个应用程序中的一个正常工作.

我通过Windows Server 2008 R2上的"高级系统设置"将ASPNETCORE_ENVIRONMENT设置为"Staging"作为系统变量,并始终在"生产"环境中结束(如果无法在任何地方找到设置,则这是默认环境).

使用命令提示符中的"设置"显示"ASPNETCORE_ENVIRONMENT = Staging"的预期结果.

调用Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")返回null.我创建了另一个名为"Test"的变量,它也返回null.调用任何其他现有变量返回预期结果.

我尝试回收应用程序池,更改应用程序池的用户,通过管理控制台重新启动IIS,甚至重新启动World Wide Web Publishing服务(可能与IIS mgmt控制台中的重置相同)都无济于事.

重新启动服务器是我可以让应用程序返回预期结果的唯一方法.


小智 9

如果您在Visual Studio调试代码,请记住,VS缓存那名VS时开始存在的环境变量 - 不是当你点击"调试"!因此,您可能必须重新启动VS才能看到对环境的任何更改.


spo*_*ahn 6

在 cmd 窗口中,运行net stop /y was && net start w3svc.

来源:ASP.NET Core Docs ->在 ASP.NET Core 中使用多个环境


注意:通过右键单击-> 停止-> 在 IIS 管理器中启动来重新启动 IIS将不起作用。