Comment configurer les appSettings par Environnement?
j'ai un .net Core 1.0.0 application console et deux environnements. J'ai besoin d'être en mesure d'utiliser appSettings.dev.json
et appSettings.test.json
basé sur les variables d'environnement que j'ai définies au moment de l'exécution. Cela semble être assez simple pour ASP.NET les applications Web de base, via l'injection de dépendances et Ihostingenvironnement et L'Environnementname env. variable, cependant Comment dois-je brancher les choses vers le haut pour l'application de console (en plus d'écrire mon propre code personnalisé qui utilise Microsoft.Framework.Configuration.EnvironmentVariables
)?
je vous Remercie.
3 réponses
C'est comme ça qu'on fait dans notre .netcore
application de console. La clé ici est d'inclure le droit dépendances sur votre projet, à savoir: (peut-être pas toutes, à vérifier en fonction de vos besoins) et copie à la sortie de l'appletting.json en tant que partie de votre buildoptions
{
"Microsoft.Extensions.Configuration": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
}
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": {
"include": [
"appsettings*.json",
"App*.config"
]
}
},
using Microsoft.Extensions.Configuration;
namespace MyApp
{
public static void Main(string[] args)
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environmentName}.json", true, true)
.AddEnvironmentVariables();
Configuration = builder.Build();
var myConnString= Configuration.GetConnectionString("SQLConn");
}
}
vous pouvez faire cela pour ASP.Net variable D'environnement de base (ASPNETCORE_ENVIRONNEMENT): -
using Microsoft.AspNetCore.Hosting;
using System;
public class Program {
private static string HostingEnvironment => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
private static bool IsEnvironment(string environmentName) => HostingEnvironment?.ToLower() == environmentName?.ToLower() && null != environmentName;
private static bool Development => IsEnvironment(EnvironmentName.Development);
private static bool Production => IsEnvironment(EnvironmentName.Production);
private static bool Staging => IsEnvironment(EnvironmentName.Staging);
public static void Main(string[] args) { // Your code here }
}
alors vous pouvez simplement utiliser la propriété
public static void Main(string[] args) {
if (Development){
// Blow up the planet
}
}
Il y a deux IHostingEnvironment
interfaces que vous devez utiliser. L'un est pour ASP.NET les applications Core, l'autre est pour les applications.net Core Console. Vous pouvez utiliser cet exemple de code pour les deux:
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting.Internal;
namespace MyApplication.Common
{
public static class ConfigurationFactory
{
/// <summary>
/// Use for ASP.NET Core Web applications.
/// </summary>
/// <param name="config"></param>
/// <param name="env"></param>
/// <returns></returns>
public static IConfigurationBuilder Configure(IConfigurationBuilder config, IHostingEnvironment env)
{
return Configure(config, env.EnvironmentName);
}
/// <summary>
/// Use for .NET Core Console applications.
/// </summary>
/// <param name="config"></param>
/// <param name="env"></param>
/// <returns></returns>
private static IConfigurationBuilder Configure(IConfigurationBuilder config, Microsoft.Extensions.Hosting.IHostingEnvironment env)
{
return Configure(config, env.EnvironmentName);
}
private static IConfigurationBuilder Configure(IConfigurationBuilder config, string environmentName)
{
return config
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
}
/// <summary>
/// Use for .NET Core Console applications.
/// </summary>
/// <returns></returns>
public static IConfiguration CreateConfiguration()
{
var env = new HostingEnvironment
{
EnvironmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"),
ApplicationName = AppDomain.CurrentDomain.FriendlyName,
ContentRootPath = AppDomain.CurrentDomain.BaseDirectory,
ContentRootFileProvider = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory)
};
var config = new ConfigurationBuilder();
var configured = Configure(config, env);
return configured.Build();
}
}
}