ASP.NET конфигурация ядра for.NET основное консольное приложение



ASP.NET ядро поддерживает новую систему конфигурации, как показано здесь:
https://docs.asp.net/en/latest/fundamentals/configuration.html



эта модель также поддерживается в консольных приложениях .NET Core?



Если не то, что альтернативно предыдущему app.config и ConfigurationManager модель?

540   4  

4 ответов:

Вы можете использовать этот фрагмент кода. Она включает в себя конфигурацию и DI.

public class Program
{
    public static ILoggerFactory LoggerFactory;
    public static IConfigurationRoot Configuration;

    public static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;

        string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

        if (String.IsNullOrWhiteSpace(environment))
            throw new ArgumentNullException("Environment not found in ASPNETCORE_ENVIRONMENT");

        Console.WriteLine("Environment: {0}", environment);

        var services = new ServiceCollection();

        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .SetBasePath(Path.Combine(AppContext.BaseDirectory))
            .AddJsonFile("appsettings.json", optional: true);
        if (environment == "Development")
        {

            builder
                .AddJsonFile(
                    Path.Combine(AppContext.BaseDirectory, string.Format("..{0}..{0}..{0}", Path.DirectorySeparatorChar), $"appsettings.{environment}.json"),
                    optional: true
                );
        }
        else
        {
            builder
                .AddJsonFile($"appsettings.{environment}.json", optional: false);
        }

        Configuration = builder.Build();

        LoggerFactory = new LoggerFactory()
            .AddConsole(Configuration.GetSection("Logging"))
            .AddDebug();

        services
            .AddEntityFrameworkNpgsql()
            .AddDbContext<FmDataContext>(o => o.UseNpgsql(connectionString), ServiceLifetime.Transient);

        services.AddTransient<IPackageFileService, PackageFileServiceImpl>();

        var serviceProvider = services.BuildServiceProvider();

        var packageFileService = serviceProvider.GetRequiredService<IPackageFileService>();

        ............
    }
}

да, и не забудьте добавить в проект.json

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": {
      "includeFiles": [
        "appsettings.json",
        "appsettings.Integration.json",
        "appsettings.Production.json",
        "appsettings.Staging.json"
      ]
    }
  },

  "publishOptions": {
    "copyToOutput": [
      "appsettings.json",
      "appsettings.Integration.json",
      "appsettings.Production.json",
      "appsettings.Staging.json"
    ]
  },
...
}

для консольного приложения .NET Core 2.0 я сделал следующее:

  1. создать новый файл с именем appsettings.json в корне проекта (Имя файла может быть любым)
  2. добавьте мои конкретные настройки в этот файл как json. Например:
{
  "myKey1" :  "my test value 1", 
  "myKey2" :  "my test value 2", 
  "foo" :  "bar" 
}
  1. настроить копирование файла в выходной каталог при каждом построении проекта (в VS - > Обозреватель решений - > щелкните правой кнопкой мыши файл - > выберите "свойства" - > дополнительно - > копировать в выходной каталог - > выберите "Копировать всегда")

  2. установите следующий пакет NuGet в моем проекте:

    • Microsoft.Увеличение.Конфигурация.Json
  3. добавить - это):

    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");
    
        var configuration = builder.Build();
    
        // rest of code...
    }
    
  4. затем прочитайте значения, используя один из следующих способов:

    string myKey1 = configuration["myKey1"];
    Console.WriteLine(myKey1);
    
    string foo = configuration.GetSection("foo").Value;
    Console.WriteLine(foo);
    

дополнительная информация: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration

Я ошибся. Вы можете использовать новый ConfigurationBuilder из консольного приложения netcore.

см.https://docs.asp.net/en/latest/fundamentals/configuration.html для примера.

однако только ядро aspnet имеет инъекцию зависимостей из коробки, поэтому у вас нет возможности иметь строго типизированные параметры конфигурации и автоматически вводить их с помощью IOptions.

если вы используете Microsoft.Extensions.Hosting (версия 2.1.0+) для размещения консольного приложения и asp.net ядро приложения, все ваши конфигурации вводятся с HostBuilder ' s ConfigureAppConfiguration и ConfigureHostConfiguration методы. Вот демо о том, как добавить appsettings.json переменные среды:

    var hostBuilder = new HostBuilder()
        .ConfigureHostConfiguration(config =>
        {
            config.AddEnvironmentVariables();

            if (args != null)
            {
                // enviroment from command line
                // e.g.: dotnet run --environment "Staging"
                config.AddCommandLine(args);
            }
        })
        .ConfigureAppConfiguration((context, builder) =>
        {
            var env = context.HostingEnvironment;
            builder.SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: false)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            // Override config by env, using like Logging:Level or Logging__Level
            .AddEnvironmentVariables();

        })
        ... // add others, logging, services
        //;

для того, чтобы скомпилировать выше код, вам нужно добавить эти пакеты:

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.0" />

Comments

    Ничего не найдено.