为什么我的ASP.NET部署服务器不使用配置的环境名称?

时间:2017-10-26 09:24:41

标签: c# asp.net asp.net-core

我已经将ASP.NET Web应用程序部署到我们用于UAT的测试服务器上。我使用以下Powershell命令将ASP.NET核心环境名称设置为“UAT”...

$Env:ASPNETCORE_ENVIRONMENT = "UAT"

...并使用...

确认此设置
Get-ChildItem Env:

但是,当我运行应用程序时,我可以在Startup中看到IHostingEnvironment.EnvironmentName属性返回“生产”。为什么会这样?

2 个答案:

答案 0 :(得分:2)

由于您将整个服务器用于UAT,因此在机器级别设置该环境变量是有意义的。您当前的powershell命令仅将其设置为当前进程,因此仅当您从同一个PowerShell控制台运行应用程序时它才会起作用(并且在关闭它时会丢失)。您可以在机器级别设置它,例如使用此powershell命令(您需要在管理员下运行控制台,以使其工作):

[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "UAT", "Machine")

您可以将其设置为任何值,而不是像“生产”,“暂存”,“开发”这样的“预定义”值。

请注意,所有用户\机器级环境变量更改仅对新进程生效,而不会为现有进程更改它们。因此,如果您在IIS下运行Web应用程序 - 您需要重新启动IIS才能使其生效。如果从cmd \ powershell控制台运行它 - 您需要重新启动控制台,依此类推。

答案 1 :(得分:1)

'Staging'是许多公司UAT的同义词,有时pre-prod使用staging

What is difference between testing environment and staging?

来自cmd或PowerShell 你可以用这个:

>setx ASPNETCORE_ENVIRONMENT "staging" /M

//确保收到此消息

     SUCCESS: Specified value was saved.

或仅来自Powershell

$Env:ASPNETCORE_ENVIRONMENT = "staging"

并按以下方式运行

dotnet run --environment "Staging"

如果您想检查它,请使用以下

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsStaging())

更新,事实上,您可以自定义您的环境变量并检查它,如下所示

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsEnvironment("UAT")