ASP.NET Core устанавливает среду хостинга в процессе сборки - PullRequest
0 голосов
/ 12 июня 2018

У меня есть ASP.NET Core Api, где я использую настройки приложения. {Environmentname} .json.Затем у меня также есть соответствующий файл launchSettings.json с различными параметрами среды, чтобы я мог работать с любым конкретным файлом настроек среды.

В файле Startup.cs у нас есть условный параметр, в котором, если мы не в-prod, затем мы используем определенный набор Jwt authentication (просто некоторые проверочные проверки отключены), затем в prod мы загружаем другую версию, в которой есть все проверки для включения.

На моем локальном хосте это прекрасно работает, когда environment.IsDevelopment () возвращает true, а environment.IsProduction () возвращает false.Отлично!

Но когда я запускаю это через наш процесс сборки и развертываю в нашей тестовой среде, environment.IsDevelopment () теперь возвращает false.

Я добавил в опцию в ПрограммеФайл .cs для добавления ConfigurationBuilder, чтобы я мог передавать переменные процессу сборки, который выглядит следующим образом:

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

Я опубликую соответствующие файлы и соответствующий код для получения дополнительной информации ...

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

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

Почему вспомогательная среда. Здесь не работают проверки {EnvironmentName} ()?

1 Ответ

0 голосов
/ 12 июня 2018

Имя среды - концепция времени выполнения , а не концепция времени компиляции (или сборки).Это означает, что при создании (или публикации) приложения среда еще не известна и настройка не оказывает никакого влияния.Ваш код не запускается при публикации приложения.

Вы можете управлять именем среды, когда запускает приложение, например, с помощью аргумента dotnet run:

dotnet run --environment=Production

Или используя известную переменную среды ASPNETCORE_ENVIRONMENT.Например, выполнив это в командной строке:

set ASPNETCORE_ENVIRONMENT=Production

Эта переменная также может быть установлена ​​с использованием файла launchSettings.json для целей отладки.Этот файл создается при создании нового проекта с использованием Visual Studio или dotnet new.

Средой по умолчанию для приложения является Production.Пожалуйста, обратитесь к документации для получения дополнительной информации по этой теме.

...