Вы можете использовать этот фрагмент кода. Он включает в себя конфигурацию и 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>();
............
}
}
Да, и не забудьте добавить в 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()
вместоAppContext.BaseDirectory
. После этого не должно быть необходимости во взломе.Для консольного приложения .NET Core 2.0 я сделал следующее:
Настройте копирование файла в выходной каталог при создании проекта (в VS -> Обозреватель решений -> щелкните файл правой кнопкой мыши -> выберите «Свойства» -> «Дополнительно» -> «Копировать в выходной каталог -> выберите« Всегда копировать »)
Установите в мой проект следующий пакет nuget:
Добавьте следующее в Program.cs (или где-нибудь
Main()
еще):Затем прочтите значения одним из следующих способов:
Больше информации: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
источник
IConfigurationRoot
все еще доступен в .NET Core 2.0 . Он наследуется от,IConfiguration
но считается производным от него, что обычно не используется . Тем не менее, пример кода был обновлен, чтобы не включать его и избежать путаницы.Если вы используете
Microsoft.Extensions.Hosting
(версия 2.1.0+) для размещения консоли приложения и asp.net ядро приложения, все ваши конфигурации инъецируютHostBuilder
«sConfigureAppConfiguration
иConfigureHostConfiguration
методов. Вот демонстрация того, как добавитьappsettings.json
переменные среды и:Чтобы скомпилировать приведенный выше код, вам необходимо добавить эти пакеты:
источник
ASPNETCORE_ENVIRONMENT
но затемcontext.HostingEnvironment.EnvironmentName
настраивается неправильноnew HostBuilder()
избыточно? НеHostBuilder
делает все это внутренне?Я ошибался. Вы можете использовать новый
ConfigurationBuilder
из консольного приложения netcore.См. Пример на https://docs.asp.net/en/latest/fundamentals/configuration.html .
Однако только ядро aspnet имеет встроенную функцию внедрения зависимостей, поэтому у вас нет возможности иметь строго типизированные параметры конфигурации и автоматически вводить их с использованием
IOptions
.источник
Microsoft.Extensions.Options
и позвонитьservice.AddOptions();
ConfigureWebHostDefaults()
вызовы в примерах необязательны и только для веб-приложений.Для основного консольного приложения dotnet 2.x это примерно так:
Вы можете ввести ILoggerFactory, IConfiguration в
SomeService
.источник
В .Net Core 3.1 нам просто нужно сделать следующее:
Использование SeriLog будет выглядеть так:
А секция Serilog appsetings.json для генерации одного файла ежедневно будет выглядеть так:
источник
Для этого можно использовать библиотеку LiteWare.Configuration . Он очень похож на оригинал .NET Framework
ConfigurationManager
и работает с .NET Core / Standard. С точки зрения кода вы получите что-то вроде:Отказ от ответственности: я являюсь автором LiteWare.Configuration.
источник
Просто накапливаю ... похоже на пост Фэйю Чжоу. Здесь я добавляю имя машины.
источник
Установите эти пакеты:
Код:
MySettingsConfig Класс:
Настройки вашего приложения могут быть такими простыми:
Кроме того, установите для файлов appsettings значение Content / Copy, если они новее:
источник