Dotnet 核心忽略 ASPNETCORE_ENVIRONMENT 变量

Dotnet core ignores ASPNETCORE_ENVIRONMENT variable

我用 dotnet 核心创建了一个简单的 webapi 项目。

我正在尝试使用 ASPNETCORE_ENVIRONMENT 系统变量设置 运行 环境。

C:\devel\apps\webapi>set ASPNETCORE_ENVIRONMENT=Production

C:\devel\apps\webapi>echo %ASPNETCORE_ENVIRONMENT%
Production

C:\devel\apps\webapi>dotnet run
Using launch settings from C:\devel\apps\webapi\Properties\launchSettings.json...
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\SSCARANO\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Hosting environment: Development
Content root path: C:\devel\apps\webapi
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

我尝试打开一个不同的控制台,并将其设置为以管理员身份登录,但该应用始终 运行 处于开发模式。

我看到了这个 () 相关问题,但我没有使用 IIS

问题是你如何设置环境变量。在命令行上你不需要引号,所以你应该改为:

C:\> set ASPNETCORE_ENVIRONMENT=Production

C:\> echo %ASPNETCORE_ENVIRONMENT%
Production

我怀疑您遇到的问题是 ASPNETCORE_ENVIRONMENT 变量是在 C:\devel\apps\webapi\Properties\launchSettings.json 文件中定义的。

dotnet run 的工作方式是加载此文件并找到 commandNameproject 的第一个配置文件,并将其用于 运行 应用程序。如果您没有对该文件进行任何更改,则很有可能该配置文件的 environmentVariables 部分包含设置为 Development.

ASPNETCORE_ENVIRONMENT 变量

如果您想 运行 应用程序处于 Production 模式,您有 2 个选项:

  • 更改现有的配置文件并将变量设置为 Production,这意味着每次执行 dotnet run 时,它都会 运行 处于生产模式的应用程序;或者
  • 添加新配置文件,其中 ASPNETCORE_ENVIRONMENT 变量设置为 Production。然后你可以使用它,如果你执行 dotnet run --launch-profile <name-of-your-new-profile>