asp.net-core
Konfigurera flera miljöer
Sök…
Att ha inställningar per miljö
För varje miljö måste du skapa en separat inställning. {Miljönamn} .json-filer:
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
Öppna sedan projekt.json-filen och inkludera dem i "inkludera" i avsnittet "publicOptions". Här listas alla filer och mappar som kommer att inkluderas när du publicerar:
"publishOptions": {
"include": [
"appsettings.Development.json",
"appsettings.Staging.json",
"appsettings.Production.json"
...
]
}
Det sista steget. Lägg till i din startklasse:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
i konstruktör där du ställer in konfigureringskällor:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Hämta / kontrollera miljönamnet från koden
Allt du behöver är en variabel av typen IHostingEnvironment
:
få miljönamn:
env.EnvironmentName
för fördefinierade
Development
,Staging
,Production
det bästa sättet att använda förlängningsmetoder från HostingEnvelopeExtensions- klassenenv.IsDevelopment() env.IsStaging() env.IsProduction()
ignorera korrekt fall (en annan förlängningsmetod från HostingEnvelopeExtensions :
env.IsEnvironment("environmentname")
skiftlägeskänslig variant:
env.EnvironmentName == "Development"
Konfigurera flera miljöer
Detta exempel visar hur du konfigurerar flera miljöer med olika beroende-injektionskonfiguration och separata mellanvaror i en Startup
.
Förutom public void Configure(IApplicationBuilder app)
och public void ConfigureServices(IServiceCollection services)
-metoder kan man använda Configure{EnvironmentName}
och Configure{EnvironmentName}Services
att ha miljöberoende konfiguration.
Genom att använda detta mönster undviks att lägga till mycket if/else
logik med en enda metod / Startup
klass och hålla den ren och åtskild.
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) { }
}
När en Configure{Environmentname}
eller Configure{Environmentname}Services
inte hittas, faller den tillbaka till Configure
respektive ConfigureServices
tjänster.
Samma semantik gäller också för Startup
klassen. StartupProduction
kommer att användas när ASPNETCORE_ENVIRONMENT
variabeln är inställd på Production
och kommer att falla tillbaka till Startup
när det är Stagging
eller Development
Ett komplett exempel:
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();
}
}
Ge miljöspecifikt innehåll i vyn
Du kan behöva återge något innehåll i vyn, vilket är specifikt för en viss miljö. För att uppnå detta mål kan du använda Hjälp för miljömärkning :
<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>
Miljö tag hjälpare kommer bara göra sitt innehåll, om den aktuella miljön matchar en av de miljöer anges med names
attribut.
Ställ in miljövariabel från kommandoraden
Att ställa in miljön till Development
SET ASPNETCORE_ENVIRONMENT=Development
Nu körs en Asp.Net Core-applikation i den definierade miljön.
Notera
- Det bör inte finnas utrymme före och efter jämställdhetstecknet
=
. - Kommandotolken ska inte stängas innan programmet körs eftersom inställningarna inte kvarstår.
Ställ in miljövariabel från PowerShell
När du använder PowerShell kan du använda setx.exe för att ställa in miljövariabler permanent.
Starta PowerShell
Skriv en av följande:
setx ASPNETCORE_ENVIRONMENT "utveckling"
setx ASPNETCORE_ENVIRONMENT "iscensättning"
Starta om PowerShell
Använda ASPNETCORE_ENVIRONMENT från web.config
Om du inte vill använda ASPNETCORE_ENVIRONMENT från miljövariabler och använda den från web.config i din applikation, ändra web.config så här-
<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>