我尝试创建一个.NET 6控制台应用程序,但在读取我的appsettings.json文件时遇到了麻烦。在Web应用程序中,我可以使用以下方法...
var builder = WebApplication.CreateBuilder(args);
但是在控制台应用程序中我要使用什么呢?当我尝试将它添加到program.cs文件时,我遇到了以下错误:"The name 'WebApplication' does not exist in the current context"
我尝试创建一个.NET 6控制台应用程序,但在读取我的appsettings.json文件时遇到了麻烦。在Web应用程序中,我可以使用以下方法...
var builder = WebApplication.CreateBuilder(args);
但是在控制台应用程序中我要使用什么呢?当我尝试将它添加到program.cs文件时,我遇到了以下错误:"The name 'WebApplication' does not exist in the current context"
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
然后您可以使用ConfigurationBuilder
来使用appsettings.json
文件
var configuration = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json");
var config = configuration.Build();
var connectionString = config.GetConnectionString("ConnectionString");
Microsoft.Extensions.Configuration.Json
,因为该包已经隐式地使用了Microsoft.Extensions.Configuration
。 - Pure.Krome文档链接:https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration
需要使用Nuget包完成此操作:
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
使用 Microsoft.Extensions.Configuration;
// Build a config object, using env vars and JSON providers.
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.Build();
// Get values from the config, given their key and their target type.
Settings settings = config.GetRequiredSection("Settings").Get<Settings>();
// Write the values to the console.
Console.WriteLine($"KeyOne = {settings.KeyOne}");
Console.WriteLine($"KeyTwo = {settings.KeyTwo}");
Console.WriteLine($"KeyThree:Message = {settings.KeyThree.Message}");
// Application code which might rely on the config could start here.
// This will output the following:
// KeyOne = 1
// KeyTwo = True
// KeyThree:Message = Oh, that's nice...
JSON文件(appsettings.json)
{
"Settings": {
"KeyOne": 1,
"KeyTwo": true,
"KeyThree": {
"Message": "Oh, that's nice..."
}
}
}
更新:我检查了这种方法,它有效;我的代码:
UPD: 我检查了这个方法,并且它有效;我的代码:
// See https://aka.ms/new-console-template for more information
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
Console.WriteLine("Hello, World!");
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
IConfiguration c = configurationBuilder.AddJsonFile("appsettings.json").AddEnvironmentVariables().Build();
var k = c.GetRequiredSection("Settings").Get<Settings>().KeyOne;
var n = 1;
public class NestedSettings
{
public string Message { get; set; } = null!;
}
public class Settings
{
public int KeyOne { get; set; }
public bool KeyTwo { get; set; }
public NestedSettings KeyThree { get; set; } = null!;
}
使用 .NET 6 控制台应用程序,尝试:
using IHost host = Host.CreateDefaultBuilder(args).Build();
IConfiguration config = host.Services.GetRequiredService<IConfiguration>();
string con= config.GetValue<string>("ConnectionStrings:conn1");
//OR
string connectionString = config["ConnectionStrings:conn1"];
Console.WriteLine($"Hello, World! {connectionString}");
appsettings.json(属性):(CopyToOutputDirectory = Always):
"ConnectionStrings": {
"conn1": "Server=localhost;Database=MyDatabase;Trusted_Connection=True",
}
Host.CreateApplicationBuilder()
进行依赖注入的话,你可以使用这个答案来通过 host.Services.GetRequiredService<IConfiguration>()
获取 IConfiguration
。否则,你可以使用另一个答案,它使用 ConfigurationBuilder
。 - undefinedappsettings.json
和 user secrets
,你也可能有一个开发的json文件。internal class Program
{
internal static IConfigurationRoot Configuration;
public static void Main()
=> new Program().MainAsync().GetAwaiter().GetResult();
private async Task MainAsync()
{
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
configurationBuilder.AddUserSecrets(typeof(Program).GetTypeInfo().Assembly, optional: false);
Configuration = configurationBuilder.Build();
...
}
}
然后在控制台应用程序的其他类中,您可以像这样简单地调用它
var someSetting = Program.Configuration["SomeSetting"];
Main
method supports async Task
, my advice is to don't use GetAwaiter().GetResult()
- Krusty_.Configuration
。var builder = Host.CreateDefaultBuilder(args)
.ConfigureServices(
(_, services) => services
.AddTransient<IService, Service>()
.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(
_.Configuration.GetConnectionString("DefaultConnection"),
b => b.MigrationsAssembly(typeof(ApplicationDbContext).Assembly.FullName)))
);
var host = builder.Build();
var dbContext = host.Services.GetRequiredService<ApplicationDbContext>();
我从这个链接中整理了以下内容:https://bjdejongblog.nl/net-core-6-dependency-injection-console-program/
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.Hosting
appsettings.json
的文件。{
"AllowedHosts": "*",
"ConnectionStrings": {
"defaultConnection": "data source=.;initial catalog=ExchangeGatewayDb;integrated security=true;MultipleActiveResultSets=True;"
}
}
Programe.cs
文件中。var hostBuilder = new HostBuilder().ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables();
if (args != null)
{
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).AddEnvironmentVariables();
var configuration = builder.Build();
var connectionString = configuration["ConnectionStrings:defaultConnection"];
}).ConfigureServices(services =>
{
services.Configure<ConsoleLifetimeOptions>(opts => opts.SuppressStatusMessages = true);
//your code
});
var buildHost = hostBuilder.Build();
buildHost.Run();
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MidcapERP.Kafka.Configurations;
using MidcapERP.Kafka.Services;
await CreateHostBuilder(args).RunConsoleAsync();
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, builder) =>
{
builder.ClearProviders(); // This line is optional if you want to clear the default logging providers
builder.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
builder.AddConsole();
builder.AddDebug();
builder.AddEventSourceLogger();
builder.SetMinimumLevel(LogLevel.Warning);
})
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
services.Configure<KafkaConfiguration>(hostContext.Configuration.GetSection(nameof(KafkaConfiguration)));
services.AddHostedService<KafkaConsumerService>();
})
.UseConsoleLifetime(); // This line should be the last one
public static IConfigurationRoot GetIConfigurationRoot(string outputPath = null)
{
var path1 = Directory.GetCurrentDirectory();
//_configuration =
var config = new ConfigurationBuilder()
.SetBasePath(path1)
.AddJsonFile("appsettings.json").Build();
return config;
//return new ConfigurationBuilder()
// .SetBasePath(outputPath)
// .AddJsonFile("appsettings.json", optional: true)
// //.AddUserSecrets("e3dfcccf-0cb3-423a-b302-e3e92e95c128")
// .AddEnvironmentVariables()
// .Build();
}
public static string CONEXION_SQL
{
get
{
var config = GetIConfigurationRoot();
return config.GetConnectionString(KeyConexionMyApp);
//return ConfigurationManager.ConnectionStrings[KeyConexionMyApp].ConnectionString;
}
}
用法:
var myConnectionSQL = ConfigMyApp.CONEXION_SQL;
使用静态构造函数:
public static partial class ConfigMyApp
{
static readonly IConfigurationRoot config;
static ConfigMyApp()
{
config = GetIConfigurationRoot();
}