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

时间:2016-10-17 11:21:32

标签: asp.net-core environment-variables

我的登台服务器上有两个网站,都是在IIS中运行的Asp.net核心网站。我已将机器范围内的环境变量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();
    } 

5 个答案:

答案 0 :(得分:13)

this similar question中所述,诀窍就是设置应用程序池以加载用户变量(IIS - &gt;服务器 - &gt;应用程序池 - &gt;右键单击池 - &gt;设置应用程序池默认值... - &gt;加载用户个人资料=真)。

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

答案 1 :(得分:12)

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

我通过Windows Server 2008 R2上的“高级系统设置”将ASPNETCORE_ENVIRONMENT设置为“Staging”作为系统变量,并始终在“Production”环境中结束(如果找不到设置,则为默认环境任何地方)。

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

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

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

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

答案 2 :(得分:8)

如果要在Visual Studio中调试代码,请记住VS会缓存VS启动时存在的环境变量-而不是单击“调试”时!因此,您可能必须重新启动VS才能看到对环境的任何更改。

答案 3 :(得分:2)

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

来源:ASP.NET核心文档-> Use multiple environments in ASP.NET Core


注意:通过右键单击->停止->在IIS管理器中启动,将无法重新启动IIS。

答案 4 :(得分:-4)

$('.calculate').change(function(){
    var groupstr = $('.selectpicker.group').val();
    var pricestr = $('.selectpicker.price').val();
    if (!isNaN(groupstr) && !isNaN(pricestr)) {
        var group = parseInt(groupstr);
        var price = parseInt(pricestr);
        var total = group * price;
        $('#total').val('$' + total);
    }
});

您可能没有添加变量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(); }