asp.net-core                
            Настройка нескольких сред
        
        
            
    Поиск…
Наличие настроек для среды
Для каждой среды вам нужно создать отдельную настройку. {EnvironmentName} .json files:
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
Затем откройте файл project.json и включите их в «include» в разделе «publishOptions». В этом списке перечислены все файлы и папки, которые будут включены при публикации:
"publishOptions": {
  "include": [
    "appsettings.Development.json",
    "appsettings.Staging.json",
    "appsettings.Production.json"
    ... 
  ]
}
Последний шаг. В вашем стартовом классе добавьте:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
в конструкторе, где вы настроили источники конфигурации:
var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
Получить / Проверить имя среды из кода
 Все, что вам нужно, это переменная типа IHostingEnvironment : 
- получить имя среды: - env.EnvironmentName
- для предопределенных сред - Development,- Staging,- Productionнаилучшим способом является использование методов расширения из класса HostingEnvironmentExtensions- env.IsDevelopment() env.IsStaging() env.IsProduction()
- правильно игнорировать регистр (другой метод расширения из HostingEnvironmentExtensions : - env.IsEnvironment("environmentname")
- чувствительный к регистру вариант: - env.EnvironmentName == "Development"
Настройка нескольких сред
 В этом примере показано, как настроить несколько сред с различной конфигурацией впрыска Dependency Injection и отдельными средними в одном классе Startup . 
 Наряду с public void Configure(IApplicationBuilder app) и public void ConfigureServices(IServiceCollection services) можно использовать Configure{EnvironmentName} и Configure{EnvironmentName}Services для настройки, зависящей от среды. 
 Использование этого шаблона позволяет избежать многократной логики if/else одного метода / класса Startup и поддерживать его чистоту и разделение. 
public class Startup
{
    public void ConfigureServices(IServiceCollection services) { }
    public void ConfigureStaggingServices(IServiceCollection services) { }
    public void ConfigureProductionServices(IServiceCollection services) { }
    
    public void Configure(IApplicationBuilder app) { }
    public void ConfigureStagging(IApplicationBuilder app) { }
    public void ConfigureProduction(IApplicationBuilder app) { }
}
 Если Configure{Environmentname}Services Configure{Environmentname} или Configure{Environmentname}Services не найдены, они вернутся к Configure или ConfigureServices соответственно. 
 Эта же семантика применима и к классу Startup . StartupProduction будет использоваться , когда ASPNETCORE_ENVIRONMENT переменная устанавливается в Production и будет падать обратно в Startup , когда это Stagging или Development 
Полный пример:
public class Startup
{
    public Startup(IHostingEnvironment hostEnv)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .SetBasePath(hostEnv.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true);
        if (hostEnv.IsDevelopment())
        {
            // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
            builder.AddApplicationInsightsSettings(developerMode: true);
        }
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }
    public IConfigurationRoot Configuration { get; set; }
    // This method gets called by the runtime. Use this method to add services to the container
    public static void RegisterCommonServices(IServiceCollection services) 
    {
        services.AddScoped<ICommonService, CommonService>();
        services.AddScoped<ICommonRepository, CommonRepository>();
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        RegisterCommonServices(services);
        
        services.AddOptions();
        services.AddMvc();
    }
    public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }
    // No console Logger and debugging tools in this configuration
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddDebug();
        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }
}
Отображать содержимое, специфичное для конкретной среды
Возможно, вам придется отображать некоторый контент, который специфичен только для некоторой среды. Для достижения этой цели вы можете использовать вспомогательный тег среды:
<environment names="Development">
    <h1>This is heading for development environment</h1>
</environment>
<environment names="Staging,Production">
    <h1>This is heading for Staging or production environment</h1>
</environment>
 Хелпер тега среды будет отображать его содержимое только в том случае, если текущая среда соответствует одному из окружений, указанному с использованием атрибута names . 
Установите переменную среды из командной строки
 Чтобы настроить среду для Development 
 SET ASPNETCORE_ENVIRONMENT=Development 
Теперь запуск приложения Asp.Net Core будет в определенной среде.
Заметка
-  Не должно быть места до и после знака равенства =.
- Командная строка не должна закрываться перед запуском приложения, потому что настройки не сохраняются.
Установите переменную среды из PowerShell
При использовании PowerShell вы можете использовать setx.exe для постоянной установки переменных среды.
- Запустить PowerShell 
- Введите одно из следующего: - setx ASPNETCORE_ENVIRONMENT "разработка" - setx ASPNETCORE_ENVIRONMENT "постановка" 
- Перезапустить PowerShell 
Использование ASPNETCORE_ENVIRONMENT из web.config
Если вы не хотите использовать ASPNETCORE_ENVIRONMENT из переменных окружения и использовать его из web.config вашего приложения, тогда измените web.config как this-
<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
  </environmentVariables>
</aspNetCore>