asp.net-core
Meerdere omgevingen configureren
Zoeken…
Apps-instellingen hebben per omgeving
Voor elke omgeving moet u afzonderlijke appsettings maken. {EnvironmentName} .json-bestanden:
- appsettings.Development.json
- appsettings.Staging.json
- appsettings.Production.json
Open vervolgens het project.json-bestand en neem ze op in "include" in de sectie "publishOptions". Hierin staan alle bestanden en mappen die worden opgenomen wanneer u publiceert:
"publishOptions": {
"include": [
"appsettings.Development.json",
"appsettings.Staging.json",
"appsettings.Production.json"
...
]
}
De laatste stap. Voeg in uw Startup-klasse het volgende toe:
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
in constructor waar u configuratiebronnen instelt:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Haal / controleer omgevingsnaam van code
Het enige dat u nodig hebt is een variabele van type IHostingEnvironment
:
haal omgevingsnaam op:
env.EnvironmentName
voor vooraf gedefinieerde
Development
,Staging
enProduction
de beste manier om uitbreidingsmethoden van de klasse HostingEnvironmentExtensions te gebruikenenv.IsDevelopment() env.IsStaging() env.IsProduction()
negeer case correct (een andere uitbreidingsmethode van HostingEnvironmentExtensions :
env.IsEnvironment("environmentname")
hoofdlettergevoelige variant:
env.EnvironmentName == "Development"
Meerdere omgevingen configureren
Dit voorbeeld laat zien hoe meerdere omgevingen met verschillende configuratie van afhankelijkheidsinjectie en afzonderlijke middlewares in één Startup
geconfigureerd.
Naast de public void Configure(IApplicationBuilder app)
en de public void ConfigureServices(IServiceCollection services)
methoden kan men Configure{EnvironmentName}
en Configure{EnvironmentName}Services
voor een omgevingsafhankelijke configuratie.
Het gebruik van dit patroon voorkomt dat er teveel if/else
logica wordt gebruikt binnen één enkele methode / Startup
en houdt deze schoon en gescheiden.
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) { }
}
Wanneer een Configure{Environmentname}
of Configure{Environmentname}Services
niet wordt gevonden, valt dit terug naar respectievelijk Configure
of ConfigureServices
.
Dezelfde semantiek is ook van toepassing op de Startup
klasse. StartupProduction
zal worden gebruikt wanneer de variabele ASPNETCORE_ENVIRONMENT
is ingesteld op Production
en terugvalt naar Startup
wanneer deze Stagging
of Development
Een compleet voorbeeld:
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();
}
}
Geef omgevingsspecifieke inhoud weer in het zicht
Mogelijk moet u bepaalde inhoud weergeven die specifiek is voor een bepaalde omgeving. Om dit doel te bereiken kunt u de omgevingstaghelper gebruiken :
<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>
De omgevingstag helpt de inhoud alleen als de huidige omgeving overeenkomt met een van de omgevingen die zijn opgegeven met het kenmerk names
.
Stel omgevingsvariabele in vanaf opdrachtregel
De omgeving instellen op Development
SET ASPNETCORE_ENVIRONMENT=Development
Nu wordt een Asp.Net Core-toepassing uitgevoerd in de gedefinieerde omgeving.
Notitie
- Er moet geen spatie zijn voor en na het gelijkheidsteken
=
. - De opdrachtprompt mag niet worden gesloten voordat de toepassing wordt uitgevoerd, omdat de instellingen niet worden behouden.
Stel omgevingsvariabele in vanuit PowerShell
Wanneer u PowerShell gebruikt, kunt u setx.exe gebruiken om omgevingsvariabelen permanent in te stellen.
Start PowerShell
Typ een van de volgende:
setx ASPNETCORE_ENVIRONMENT "ontwikkeling"
setx ASPNETCORE_ENVIRONMENT "enscenering"
Start PowerShell opnieuw
ASPNETCORE_ENVIRONMENT gebruiken van web.config
Als u ASPNETCORE_ENVIRONMENT van omgevingsvariabelen niet wilt gebruiken en wilt gebruiken van web.config van uw toepassing, wijzigt u web.config als volgt:
<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>