ASP.NET Core支持一个新的配置系统,如下所示:https: //docs.asp.net/en/latest/fundamentals/configuration.html
.NET Core控制台应用程序是否也支持此模型?
如果不是以前app.config和ConfigurationManager型号的替代品?
Ray*_*ega 185
对于.NET Core 2.0控制台应用程序,我执行了以下操作:
Run Code Online (Sandbox Code Playgroud){ "myKey1" : "my test value 1", "myKey2" : "my test value 2", "foo" : "bar" }
配置在构建项目时将文件复制到输出目录(在VS - >解决方案资源管理器 - >右键单击文件 - >选择'属性' - >高级 - >复制到输出目录 - >选择'始终复制')
在我的项目中安装以下nuget包:
将以下内容添加到Program.cs(或任何Main()位置):
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
// rest of code...
}
Run Code Online (Sandbox Code Playgroud)然后使用以下任一方法读取值:
string myKey1 = configuration["myKey1"];
Console.WriteLine(myKey1);
string foo = configuration.GetSection("foo").Value;
Console.WriteLine(foo);
Run Code Online (Sandbox Code Playgroud)更多信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
ali*_*gin 62
您可以使用此代码段.它包括配置和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>();
............
}
}
Run Code Online (Sandbox Code Playgroud)
哦,不要忘记在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"
]
},
...
}
Run Code Online (Sandbox Code Playgroud)
Fei*_*hou 15
如果你使用Microsoft.Extensions.Hosting(版本2.1.0+)托管的控制台应用程序和asp.net核心应用程序,所有的配置都注射HostBuilder的ConfigureAppConfiguration和ConfigureHostConfiguration方法.这是关于如何添加appsettings.json和环境变量的演示:
var hostBuilder = new HostBuilder()
.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables();
if (args != null)
{
// enviroment from command line
// e.g.: dotnet run --environment "Staging"
config.AddCommandLine(args);
}
})
.ConfigureAppConfiguration((context, builder) =>
{
var env = context.HostingEnvironment;
builder.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
// Override config by env, using like Logging:Level or Logging__Level
.AddEnvironmentVariables();
})
... // add others, logging, services
//;
Run Code Online (Sandbox Code Playgroud)
为了编译上面的代码,你需要添加这些包:
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.0" />
Run Code Online (Sandbox Code Playgroud)
Dmi*_*hev 11
如果您使用.netcore 3.1,最简单的方法是使用新的配置系统来调用CreateDefaultBuilder静态类的方法Host并配置应用程序
public class Program
{
public static void Main(string[] args)
{
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
IHostEnvironment env = context.HostingEnvironment;
config.AddEnvironmentVariables()
// copy configuration files to output directory
.AddJsonFile("appsettings.json")
// default prefix for environment variables is DOTNET_
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddCommandLine(args);
})
.ConfigureServices(services =>
{
services.AddSingleton<IHostedService, MySimpleService>();
})
.Build()
.Run();
}
}
class MySimpleService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("StartAsync");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("StopAsync");
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要为文件设置 Copy to Output Directory = 'Copy if newer'appsettings.json并且appsettings.{environment}.json
您还可以设置环境变量 {prefix} ENVIRONMENT (默认前缀为 DOTNET)以允许选择特定的配置参数。
.csproj 文件:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>ConsoleApplication3</RootNamespace>
<AssemblyName>ConsoleApplication3</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.7" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.7" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
更多详细信息.NET 通用主机
kim*_*gro 10
我误解了.您可以使用ConfigurationBuildernetcore控制台应用程序中的新功能.
有关示例,请参阅https://docs.asp.net/en/latest/fundamentals/configuration.html.
但是,只有aspnet核心具有开箱即用的依赖注入,因此您无法使用强类型配置设置并自动注入它们IOptions.
在 .Net Core 3.1 上,我们只需要执行以下操作:
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
}
Run Code Online (Sandbox Code Playgroud)
使用 SeriLog 将如下所示:
using Microsoft.Extensions.Configuration;
using Serilog;
using System;
namespace yournamespace
{
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger();
try
{
Log.Information("Starting Program.");
}
catch (Exception ex)
{
Log.Fatal(ex, "Program terminated unexpectedly.");
return;
}
finally
{
Log.CloseAndFlush();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
用于每天生成一个文件的 Serilog appsettings.json 部分将如下所示:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\\Logs\\Program.json",
"rollingInterval": "Day",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76862 次 |
| 最近记录: |