代码之家  ›  专栏  ›  技术社区  ›  ganders

asp.net核心集构建过程中的宿主环境

  •  0
  • ganders  · 技术社区  · 7 年前

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

    在startup.cs中,我们有一个条件设置,如果我们处于非prod环境中,则使用 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;
    });
    

    为什么helper环境,{environmentname}()检查在这里不起作用?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Henk Mollema    7 年前

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

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

    dotnet run --environment=Production
    

    或使用已知的环境变量 ASPNETCORE_ENVIRONMENT . 例如,在命令行执行此操作:

    set ASPNETCORE_ENVIRONMENT=Production
    

    此变量也可以使用 launchSettings.json 用于调试的文件。使用visual studio或 dotnet new .

    应用程序的默认环境是生产环境。请参阅 to the documentation 有关此主题的详细信息。