ASP.NET Core 托管环境变量被忽略

问题描述 投票:0回答:5

我的临时服务器上有两个网站,它们都是在 IIS 中运行的 ASP.NET Core 网站。我已将机器范围内的环境变量

ASPNETCORE_ENVIRONMENT
设置为
Staging
。这对于其中一个站点效果很好,但另一个站点忽略该变量并以生产模式运行。我必须将托管环境配置到
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();
    }
asp.net-core environment-variables
5个回答
33
投票

正如这个类似的问题中所述,技巧就是简单地设置应用程序池来加载用户变量(IIS - >服务器 - >应用程序池 - >右键单击池 - >设置应用程序池默认值... - >加载用户配置文件 = True)。

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


23
投票

我刚刚花了最后几个小时处理同样的问题。我不确定结果是否相同,因为您似乎有两个应用程序之一正在运行。

我通过 Windows Server 2008 R2 上的“高级系统设置”将 ASPNETCORE_ENVIRONMENT 设置为“Staging”作为系统变量,并且始终处于“生产”环境(如果在任何地方都找不到设置,则这是默认环境) 。

在命令提示符中使用“set”显示“ASPNETCORE_ENVIRONMENT=Staging”的预期结果。

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

我尝试回收应用程序池,更改应用程序池的用户,通过管理控制台重新启动 IIS,甚至重新启动万维网发布服务(可能与 IIS 管理控制台中的重置相同)都无济于事。

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


16
投票

如果您在 Visual Studio 中调试代码,请记住 Visual Studio 会缓存 Visual Studio 启动时存在的环境变量 - 而不是您点击“调试”时存在的环境变量!

因此,您可能必须重新启动 Visual Studio 才能看到对环境的任何更改。


7
投票

从 cmd 窗口运行

net stop /y was && net start w3svc

来源:ASP.NET Core 文档 -> 在 ASP.NET Core 中使用多个环境 -> Windows - IIS 部署


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


-6
投票
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);

        if (env.IsDevelopment())
        {
            // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
            builder.AddUserSecrets();
        }

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

您可能没有添加变量

builder.AddEnvironmentVariables();

© www.soinside.com 2019 - 2024. All rights reserved.