我已经将一个 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")