Puede usar este fragmento de código. Incluye Configuración y 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>();
............
}
}
Ah, y no olvides agregar el proyecto .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"
]
},
...
}
Directory.GetCurrentDirectory()
lugar deAppContext.BaseDirectory
. No debería haber necesidad de hackear después.Para una aplicación de consola .NET Core 2.0, hice lo siguiente:
Configure para copiar el archivo al directorio de salida siempre que se construya el proyecto (en VS -> Explorador de soluciones -> haga clic con el botón derecho en el archivo -> seleccione 'Propiedades' -> Avanzado -> Copiar al directorio de salida -> seleccione 'Copiar siempre')
Instale el siguiente paquete nuget en mi proyecto:
Agregue lo siguiente a Program.cs (o donde
Main()
se encuentre):Luego lea los valores utilizando cualquiera de las siguientes formas:
Más información: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
fuente
IConfigurationRoot
todavía está disponible en .NET Core 2.0 . Hereda de,IConfiguration
pero se considera un caso derivado que no se usa comúnmente . En cualquier caso, el ejemplo de código se ha actualizado para no incluirlo y evitar confusiones.Si utiliza
Microsoft.Extensions.Hosting
(versión 2.1.0+) para alojar su aplicación de consola y asp.net aplicación central, todas las configuraciones son inyectados conHostBuilder
'sConfigureAppConfiguration
yConfigureHostConfiguration
métodos. Aquí está la demostración sobre cómo agregar lasappsettings.json
variables de entorno:Para compilar el código anterior, debe agregar estos paquetes:
fuente
ASPNETCORE_ENVIRONMENT
pero luegocontext.HostingEnvironment.EnvironmentName
no se configura correctamentenew HostBuilder()
redundante? ¿NoHostBuilder
lo hace todo internamente?Estaba equivocado. Puede usar el nuevo
ConfigurationBuilder
desde una aplicación de consola netcore.Ver https://docs.asp.net/en/latest/fundamentals/configuration.html para ver un ejemplo.
Sin embargo, solo el núcleo de aspnet tiene una inyección de dependencia lista para usar, por lo que no tiene la capacidad de tener configuraciones de configuración fuertemente tipadas e inyectarlas automáticamente usando
IOptions
.fuente
Microsoft.Extensions.Options
y llamadaservice.AddOptions();
ConfigureWebHostDefaults()
llamadas en los ejemplos son opcionales, y solo para aplicaciones web.Es algo como esto, para una aplicación de consola central dotnet 2.x:
El podría inyectar ILoggerFactory, IConfiguration en el
SomeService
.fuente
En .Net Core 3.1 solo necesitamos hacer esto:
El uso de SeriLog se verá así:
Y la sección Serilog appsetings.json para generar un archivo diariamente se verá así:
fuente
Puede usar la biblioteca LiteWare.Configuration para eso. Es muy similar al .NET Framework original
ConfigurationManager
y funciona para .NET Core / Standard. En cuanto al código, terminará con algo como:Descargo de responsabilidad: soy el autor de LiteWare.Configuration.
fuente
Simplemente acumulando ... similar a la publicación de Feiyu Zhou. Aquí estoy agregando el nombre de la máquina.
fuente
Instale estos paquetes:
Código:
MySettingsConfig Class:
Sus ajustes de aplicaciones pueden ser tan simples como esto:
Además, configure los archivos de configuración de la aplicación en Contenido / Copiar si es más reciente:
fuente