c# .net-core .net-core-2.0

c# - Configuración para aplicaciones de consola.net Core 2.0



.net-core .net-core-2.0 (2)

Almacenar un private static IServiceProvider provider; en su programa.cs. Luego, configure la configuración como lo haría en el núcleo aps.net pero, por supuesto, lo haría en Main (). A continuación, configure cada sección dentro de su IServiceProvider. De esta forma se puede utilizar la inyección de dependencia del constructor. También tenga en cuenta que tengo dos configuraciones en mi ejemplo diluido. Uno contiene secretos que deben mantenerse fuera del control de la fuente y almacenados fuera de la estructura del proyecto, y tengo AppSettings que contiene ajustes de configuración estándar que no necesitan ser privados (¡es importante!)

Cuando desee utilizar la configuración, puede retirarla del proveedor o extraer un objeto del proveedor que utiliza sus clases de configuración en sus constructores.

private static IServiceProvider provider; private static EventReceiver receiver; static void Main(string[] args) { IConfigurationRoot config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(path: "/opt/Secrets.json", optional: false, reloadOnChange: true) .AddJsonFile(path: "AppSettings.json", optional: false, reloadOnChange: true) .Build(); provider = new ServiceCollection() .AddSingleton<CancellationTokenSource>() .Configure<Settings>(config.GetSection("SettingsSection")) .BuildServiceProvider(); receiver = new EventReceiver<Poco>(ProcessPoco); provider.GetRequiredService<CancellationTokenSource>().Token.WaitHandle.WaitOne(); } private static void ProcessPoco(Poco poco) { IOptionsSnapshot<Settings> settings = provider.GetRequiredService<IOptionsSnapshot<Settings>>(); Console.WriteLine(settings.ToString()); }

estas son las dependencias con las que recomiendo comenzar a hacer una aplicación cli de dotnetcore.

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" /> <PackageReference Include="microsoft.extensions.logging.abstractions" Version="2.0.0" />

También tenga en cuenta que necesitará copiar su configuración a sus directorios de publicación y construcción. Puede hacerlo agregando objetivos a su archivo csproj.

<Target Name="CopyToOut" BeforeTargets="BeforeBuild"> <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" /> </Target> <Target Name="CopyToOutOnPublish" AfterTargets="Publish">DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" /> <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" /> </Target>

En .net Core 1 podríamos hacer esto:

IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .Build();

Y eso le dio uso al objeto de configuración que luego podríamos usar en nuestra aplicación de consola.

Todos los ejemplos para .net core 2.0 parecen estar adaptados a la nueva forma en que se crea Asp.Net core config.

¿Cuál es la forma de crear configuraciones para aplicaciones de consola?

Actualización: esta pregunta no está relacionada con el núcleo de Asp.net. Por favor, no agregue etiquetas core de asp.net al editar.


Parece que no hay cambio, como dice Jehof.

ConfigurationBuilder está en su propio paquete, como dice Jeroen Mostert.

Pero asegúrese de tener también el paquete Microsoft.Extensions.Configuration.Json, donde reside la extensión .AddJsonFile ().

En resumen, necesita los siguientes dos paquetes NuGet:

  • Microsoft.Extensions.Configuration (2.0.0)
  • Microsoft.Extensions.Configuration.Json (2.0.0)