Sie können dieses Code-Snippet verwenden. Es enthält Konfiguration und 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, und vergessen Sie nicht, in project.json hinzuzufügen
{
"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()
anstelle vonAppContext.BaseDirectory
. Der Hack sollte danach nicht mehr benötigt werden.Für eine .NET Core 2.0-Konsolen-App habe ich Folgendes getan:
Konfigurieren Sie das Kopieren der Datei in das Ausgabeverzeichnis, wenn das Projekt erstellt wird (in VS -> Projektmappen- Explorer -> Rechtsklick auf Datei -> Wählen Sie 'Eigenschaften' -> Erweitert -> In Ausgabeverzeichnis kopieren -> Wählen Sie 'Immer kopieren').
Installieren Sie das folgende Nuget-Paket in meinem Projekt:
Fügen Sie Program.cs (oder wo immer
Main()
es sich befindet) Folgendes hinzu :Lesen Sie dann die Werte auf eine der folgenden Arten:
Weitere Informationen: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
quelle
IConfigurationRoot
ist weiterhin in .NET Core 2.0 verfügbar . Es erbt von,IConfiguration
aber es wird als abgeleiteter Fall davon angesehen, der nicht häufig verwendet wird . Unabhängig davon wurde das Codebeispiel aktualisiert, um es nicht einzuschließen und Verwirrung zu vermeiden.Wenn Sie
Microsoft.Extensions.Hosting
(Konsole 2.1.0+) zum Hosten Ihrer Konsolen-App und der asp.net-Kern-App verwenden, werden alle Ihre Konfigurationen mitHostBuilder
'sConfigureAppConfiguration
undConfigureHostConfiguration
Methoden versehen. Hier ist die Demo zum Hinzufügen derappsettings.json
Variablen und um:Um den obigen Code zu kompilieren, müssen Sie folgende Pakete hinzufügen:
quelle
ASPNETCORE_ENVIRONMENT
aber danncontext.HostingEnvironment.EnvironmentName
nicht richtig festgelegtnew HostBuilder()
redundant? Macht das nichtHostBuilder
alles intern?Ich lag falsch. Sie können das Neue
ConfigurationBuilder
aus einer Netcore-Konsolenanwendung verwenden.Ein Beispiel finden Sie unter https://docs.asp.net/en/latest/fundamentals/configuration.html .
Allerdings verfügt nur der Aspnet-Core über eine sofort einsatzbereite Abhängigkeitsinjektion, sodass Sie nicht in der Lage sind, stark typisierte Konfigurationseinstellungen zu verwenden und diese automatisch mit zu injizieren
IOptions
.quelle
Microsoft.Extensions.Options
und anrufenservice.AddOptions();
ConfigureWebHostDefaults()
Aufrufe in den Beispielen optional sind und nur für Web-Apps.Für eine Dotnet 2.x-Kernkonsolenanwendung ist dies ungefähr so:
Das könnten Sie ILoggerFactory, IConfiguration in die injizieren
SomeService
.quelle
In .Net Core 3.1 müssen wir nur Folgendes tun:
Die Verwendung von SeriLog sieht folgendermaßen aus:
Der Abschnitt Serilog appsetings.json zum täglichen Generieren einer Datei sieht folgendermaßen aus:
quelle
Sie können dafür die LiteWare.Configuration- Bibliothek verwenden. Es ist dem Original von .NET Framework sehr ähnlich
ConfigurationManager
und funktioniert für .NET Core / Standard. In Bezug auf den Code erhalten Sie am Ende Folgendes:Haftungsausschluss: Ich bin der Autor von LiteWare.Configuration.
quelle
Einfach aufstapeln ... ähnlich wie bei Feiyu Zhous Post. Hier füge ich den Maschinennamen hinzu.
quelle
Installieren Sie diese Pakete:
Code:
MySettingsConfig Klasse:
Ihre Apps können so einfach sein:
Stellen Sie außerdem die Appsettings-Dateien auf Content / Copy ein, falls neu:
quelle