ASP.NET конфигурация ядра for.NET основное консольное приложение
ASP.NET ядро поддерживает новую систему конфигурации, как показано здесь:
https://docs.asp.net/en/latest/fundamentals/configuration.html
эта модель также поддерживается в консольных приложениях .NET Core?
Если не то, что альтернативно предыдущему app.config и ConfigurationManager модель?
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 я сделал следующее:
- создать новый файл с именем appsettings.json в корне проекта (Имя файла может быть любым)
- добавьте мои конкретные настройки в этот файл как json. Например:
{ "myKey1" : "my test value 1", "myKey2" : "my test value 2", "foo" : "bar" }
настроить копирование файла в выходной каталог при каждом построении проекта (в VS - > Обозреватель решений - > щелкните правой кнопкой мыши файл - > выберите "свойства" - > дополнительно - > копировать в выходной каталог - > выберите "Копировать всегда")
установите следующий пакет NuGet в моем проекте:
- Microsoft.Увеличение.Конфигурация.Json
добавить - это):
static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var configuration = builder.Build(); // rest of code... }затем прочитайте значения, используя один из следующих способов:
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' sConfigureAppConfigurationи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