ASP.NET Core在构建过程中设置托管环境

gan*_*ers 1 c# build environment-variables asp.net-core

我在ASP.NET Core Api哪里使用appsettings。{environmentname} .json配置文件。然后,我还有具有不同环境选项的适当的launchSettings.json文件,因此我可以使用任何特定的环境设置文件运行。

在Startup.cs中,我们有一个条件设置,如果我们处于非产品环境中,则使用一组特定的Jwt authentication(只是关闭了一些验证检查),然后在产品中加载一个具有要打开的所有检查。

在我的本地主机上,当environment.IsDevelopment()返回true,而environment.IsProduction()返回false时,此方法效果很好。大!

但是,当我在构建过程中运行并部署到测试环境时,该environment.IsDevelopment()现在返回false。

我在Program.cs文件中添加了选项以添加ConfigurationBuilder,以便可以将变量传递给构建过程,如下所示:

dotnet restore
dotnet build --environment "Development"
dotnet publish -o ..\Artifacts
Run Code Online (Sandbox Code Playgroud)

我将发布相关文件以及相关代码以获取更多信息...

Program.cs

public static IWebHost BuildWebHost(string[] args)
{
    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .Build();

    return WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .UseNLog()
        .Build();
}
Run Code Online (Sandbox Code Playgroud)

Startup.cs(ConfigureServices方法)

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
    // removed code not relevant...


    // options.TokenValidationParameters = Environment.IsProduction()
    // options.TokenValidationParameters = Environment.IsEnvironment("Prod")
    options.TokenValidationParameters = Environment.IsDevelopment()
        ? devTokenValidationParameters
        : prodTokenValidationParameters;

    // options.TokenValidationParameters = devTokenValidationParameters;
});
Run Code Online (Sandbox Code Playgroud)

为什么是辅助环境。{EnvironmentName}()检查在这里不起作用?

Hen*_*ema 5

环境名称是运行时概念,而不是编译(或构建)时间概念。这意味着在构建(或发布)应用程序时,环境未知,设置无效。发布应用程序时,您的代码未运行。

您可以在运行应用程序时控制环境名称,例如通过以下参数dotnet run

dotnet run --environment=Production
Run Code Online (Sandbox Code Playgroud)

或使用已知的环境变量ASPNETCORE_ENVIRONMENT。例如,通过在命令行上执行以下命令:

set ASPNETCORE_ENVIRONMENT=Production
Run Code Online (Sandbox Code Playgroud)

launchSettings.json出于调试目的,也可以使用该文件来设置此变量。使用Visual Studio或.NET创建新项目时,将生成此文件dotnet new

应用程序的默认环​​境是生产。请参考文档以获取有关此主题的更多信息。