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



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

$Env:ASPNETCORE_ENVIRONMENT = "UAT"

。并使用...

Get-ChildItem Env:

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

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

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

您可以将其设置为任何值,而不必设置为"预定义"的值,如生产、暂存、开发。

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

'Staging'是许多公司UAT的同义词,有时pre-prod 改用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")

最新更新