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.

21
demandé sur user2916547 2016-09-19 15:46:43

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");
    }

}

32
répondu Jaya 2016-11-16 21:21:02

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
        }
    }
3
répondu Antony Booth 2018-02-06 18:44:19

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();
        }
    }
}
0
répondu MovGP0 2018-08-20 07:53:53