Você pode usar esse trecho de código. Inclui configuração e 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, e não se esqueça de adicionar o project.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()
vez deAppContext.BaseDirectory
. Não deve haver necessidade de hackear depois.Para um aplicativo de console do .NET Core 2.0, fiz o seguinte:
Configure para copiar o arquivo no diretório de saída sempre que o projeto for criado (em VS -> Solution Explorer -> arquivo com o botão direito do mouse -> selecione 'Propriedades' -> Avançado -> Copiar para Diretório de Saída -> selecione 'Copiar Sempre')
Instale o seguinte pacote de nuget no meu projeto:
Adicione o seguinte ao Program.cs (ou onde quer que
Main()
esteja):Em seguida, leia os valores usando uma das seguintes maneiras:
Mais informações: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
fonte
IConfigurationRoot
ainda está disponível no .NET Core 2.0 . Ele é herdado,IConfiguration
mas é considerado um caso derivado, que não é comumente usado . Independentemente disso, o exemplo de código foi atualizado para não incluí-lo e evitar qualquer confusão.Se você usar
Microsoft.Extensions.Hosting
(versão 2.1.0+) para hospedar seu aplicativo de console e o aplicativo principal do asp.net, todas as suas configurações serão injetadas comHostBuilder
'sConfigureAppConfiguration
eConfigureHostConfiguration
métodos. Aqui está a demonstração sobre como adicionar asappsettings.json
variáveis de ambiente e:Para compilar o código acima, você precisa adicionar estes pacotes:
fonte
ASPNETCORE_ENVIRONMENT
, mas depoiscontext.HostingEnvironment.EnvironmentName
não está sendo definido corretamentenew HostBuilder()
redundante? NãoHostBuilder
faz tudo internamente?Eu estava errado. Você pode usar o novo
ConfigurationBuilder
em um aplicativo de console netcore.Veja https://docs.asp.net/en/latest/fundamentals/configuration.html para um exemplo.
No entanto, apenas o núcleo do aspnet tem injeção de dependência pronta para uso, para que você não tenha a capacidade de definir fortemente as configurações digitadas e injetá-las automaticamente usando
IOptions
.fonte
Microsoft.Extensions.Options
e chamadaservice.AddOptions();
ConfigureWebHostDefaults()
chamadas nos exemplos são opcionais e apenas para aplicativos da Web.É algo assim, para um aplicativo de console central dotnet 2.x:
Você pode injetar ILoggerFactory, IConfiguration no
SomeService
.fonte
No .Net Core 3.1, precisamos apenas fazer o seguinte:
O uso do SeriLog será semelhante a:
E a seção Serilog appsetings.json para gerar um arquivo diariamente terá a seguinte aparência:
fonte
Você pode usar a biblioteca LiteWare.Configuration para isso. É muito semelhante ao original do .NET Framework
ConfigurationManager
e funciona para o .NET Core / Standard. Em termos de código, você terminará com algo como:Disclaimer: Eu sou o autor do LiteWare.Configuration.
fonte
Apenas empilhando ... semelhante ao post de Feiyu Zhou. Aqui estou adicionando o nome da máquina.
fonte
Instale estes pacotes:
Código:
Classe MySettingsConfig:
Suas configurações de aplicativos podem ser tão simples quanto isto:
Além disso, defina os arquivos de configurações de aplicativos como Conteúdo / Copiar, se mais recente:
fonte