【问题标题】:ASP.NET Core set hosting environment in build processASP.NET Core 在构建过程中设置托管环境
【发布时间】:2018-11-22 02:34:38
【问题描述】:

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

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

在我的本地主机上,这在 environment.IsDevelopment() 返回 true 而 environment.IsProduction() 返回 false 的情况下非常有效。太好了!

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

我已经在 Program.cs 文件中添加了用于添加 ConfigurationBuilder 的选项,这样我就可以将变量传递给我的构建过程,如下所示:

dotnet restore
dotnet build --environment "Development"
dotnet publish -o ..\Artifacts

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

程序.cs

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

    return WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .UseNLog()
        .Build();
}

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;
});

为什么辅助 environment.Is{EnvironmentName}() 检查在这里不起作用?

【问题讨论】:

    标签: c# asp.net-core build environment-variables


    【解决方案1】:

    环境名称是runtime 概念,而不是compile(或构建)时间概念。这意味着在构建(或发布)应用程序时,环境尚不清楚,并且设置无效。当您发布应用程序时,您的代码没有运行。

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

    dotnet run --environment=Production
    

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

    set ASPNETCORE_ENVIRONMENT=Production
    

    也可以使用launchSettings.json 文件设置此变量以进行调试。此文件是在使用 Visual Studio 或dotnet new 创建新项目时生成的。

    应用程序的默认环​​境是生产环境。请参考to the documentation 了解有关此主题的更多信息。

    【讨论】:

    • 感谢这个非常明确的答案。它帮助我理解了很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多