Anda dapat menggunakan potongan kode ini. Ini termasuk Konfigurasi dan 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>();
............
}
}
Oh, dan jangan lupa menambahkan di 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()
sebagai gantiAppContext.BaseDirectory
. Seharusnya tidak perlu melakukan hacking sesudahnya.Untuk aplikasi konsol .NET Core 2.0, saya melakukan hal berikut:
Mengkonfigurasi untuk menyalin file ke direktori output setiap kali proyek dibangun (dalam VS -> Solution Explorer -> file klik kanan -> pilih 'Properties' -> Advanced -> Salin ke Direktori Output -> pilih 'Salin Selalu')
Instal paket nuget berikut di proyek saya:
Tambahkan berikut ini ke Program.cs (atau di mana pun
Main()
berada):Kemudian baca nilai menggunakan salah satu dari cara berikut:
Info lebih lanjut: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
sumber
IConfigurationRoot
masih tersedia di .NET Core 2.0 . Itu mewarisi dariIConfiguration
tetapi itu dianggap kasus turunan dari itu yang tidak umum digunakan . Apapun, contoh kode telah diperbarui untuk tidak memasukkannya dan menghindari kebingungan.Jika Anda menggunakan
Microsoft.Extensions.Hosting
(versi 2.1.0+) untuk menjadi tuan rumah aplikasi inti aplikasi konsol dan asp.net Anda, semua konfigurasi Anda yang disuntikkan denganHostBuilder
'sConfigureAppConfiguration
danConfigureHostConfiguration
metode. Berikut ini demo tentang cara menambahkanappsettings.json
variabel dan lingkungan:Untuk mengkompilasi kode di atas, Anda perlu menambahkan paket-paket ini:
sumber
ASPNETCORE_ENVIRONMENT
tetapi kemudiancontext.HostingEnvironment.EnvironmentName
tidak diatur dengan benarnew HostBuilder()
mubazir? TidakHostBuilder
melakukan semuanya secara internal?Saya salah. Anda dapat menggunakan yang baru
ConfigurationBuilder
dari aplikasi konsol netcore.Lihat https://docs.asp.net/en/latest/fundamentals/configuration.html untuk contoh.
Namun, hanya inti aspnet yang memiliki injeksi dependen di luar kotak sehingga Anda tidak memiliki kemampuan untuk memiliki pengaturan konfigurasi yang sangat diketik dan secara otomatis menyuntikkannya menggunakan
IOptions
.sumber
Microsoft.Extensions.Options
dan meneleponservice.AddOptions();
ConfigureWebHostDefaults()
panggilan dalam contoh adalah opsional, dan hanya untuk aplikasi Web.Ini sesuatu seperti ini, untuk aplikasi konsol dotnet 2.x core:
Anda dapat menyuntikkan ILoggerFactory, IConfiguration di
SomeService
.sumber
Pada .Net Core 3.1 kita hanya perlu melakukan ini:
Menggunakan SeriLog akan terlihat seperti:
Dan bagian Serilog appsetings.json untuk menghasilkan satu file setiap hari akan terlihat seperti:
sumber
Anda dapat menggunakan pustaka LiteWare.Configuration untuk itu. Ini sangat mirip dengan .NET Framework orisinil
ConfigurationManager
dan berfungsi untuk .NET Core / Standard. Dari segi kode, Anda akan berakhir dengan sesuatu seperti:Penafian: Saya adalah penulis LiteWare.Configuration.
sumber
Hanya menumpuk ... mirip dengan pos Feiyu Zhou. Di sini saya menambahkan nama mesin.
sumber
Instal paket-paket ini:
Kode:
Kelas MySettingsConfig:
Pengaturan aplikasi Anda dapat sesederhana ini:
Juga, atur file pengaturan aplikasi ke Konten / Salin jika lebih baru:
sumber