asp.net-core
Konfigurowanie wielu środowisk
Szukaj…
Posiadanie ustawień dla środowiska
Dla każdego środowiska musisz utworzyć osobne ustawienia. Pliki {EnvironmentName} .json:
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
Następnie otwórz plik project.json i dołącz go do sekcji „uwzględnij” w sekcji „publikujOpcje”. Zawiera listę wszystkich plików i folderów, które zostaną uwzględnione podczas publikowania:
"publishOptions": {
"include": [
"appsettings.Development.json",
"appsettings.Staging.json",
"appsettings.Production.json"
...
]
}
Ostatni krok. W klasie Startup dodaj:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
w konstruktorze, w którym konfigurujesz źródła konfiguracji:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Pobierz / sprawdź nazwę środowiska z kodu
Wszystko czego potrzebujesz to zmienna typu IHostingEnvironment
:
pobierz nazwę środowiska:
env.EnvironmentName
zaprogramowanej
Development
,Staging
,Production
środowisk najlepszym sposobem jest użycie metod Extension z HostingEnvironmentExtensions klasieenv.IsDevelopment() env.IsStaging() env.IsProduction()
poprawnie zignoruj wielkość liter (inna metoda rozszerzenia z HostingEnvironmentExtensions :
env.IsEnvironment("environmentname")
wariant z rozróżnianiem wielkości liter:
env.EnvironmentName == "Development"
Konfigurowanie wielu środowisk
Ten przykład pokazuje, jak skonfigurować wiele środowisk z różnymi konfiguracjami Wstrzykiwania zależności i osobnymi programami pośrednimi w jednej klasie Startup
.
Oprócz public void Configure(IApplicationBuilder app)
i public void ConfigureServices(IServiceCollection services)
można użyć funkcji Configure{EnvironmentName}
i Configure{EnvironmentName}Services
aby mieć konfigurację zależną od środowiska.
Użycie tego wzorca pozwala uniknąć nadmiernej logiki if/else
jednej metody / klasy Startup
i utrzymuje ją w czystości i oddzieleniu.
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) { }
}
Gdy usługi Configure{Environmentname}
lub Configure{Environmentname}Services
nie zostaną znalezione, nastąpi powrót do odpowiednio opcji Configure
lub ConfigureServices
.
Ta sama semantyka dotyczy również klasy Startup
. StartupProduction
będą stosowane, gdy ASPNETCORE_ENVIRONMENT
zmienna jest ustawiona na Production
i spadnie z powrotem na Startup
, kiedy to Stagging
lub Development
Kompletny przykład:
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();
}
}
Renderuj zawartość specyficzną dla środowiska
Może być konieczne renderowanie niektórych treści w widoku, które są specyficzne tylko dla niektórych środowisk. Aby osiągnąć ten cel, możesz użyć pomocnika tagów środowiska:
<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>
Pomocnik znacznika Środowisko wyświetli jego zawartość tylko wtedy, gdy bieżące środowisko pasuje do jednego ze środowisk określonych za pomocą atrybutu names
.
Ustaw zmienną środowiskową z wiersza poleceń
Aby ustawić środowisko na Development
SET ASPNETCORE_ENVIRONMENT=Development
Teraz aplikacja Asp.Net Core będzie działać w zdefiniowanym środowisku.
Uwaga
- Nie powinno być spacji przed i po znaku równości
=
. - Wiersz polecenia nie powinien być zamykany przed uruchomieniem aplikacji, ponieważ ustawienia nie zostały zachowane.
Ustaw zmienną środowiskową z PowerShell
Korzystając z PowerShell, możesz użyć setx.exe, aby ustawić zmienne środowiskowe na stałe.
Uruchom PowerShell
Wpisz jedno z poniższych:
setx ASPNETCORE_ENVIRONMENT „rozwój”
setx ASPNETCORE_ENVIRONMENT „inscenizacja”
Uruchom ponownie PowerShell
Za pomocą ASPNETCORE_ENVIRONMENT z web.config
Jeśli nie chcesz używać ASPNETCORE_ENVIRONMENT ze zmiennych środowiskowych i używać go z pliku web.config aplikacji, zmodyfikuj plik web.config w następujący sposób:
<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>