如何在 .NET 5 控制台应用程序中正确设置配置?

Mas*_*ler 6 c# configuration .net-5

我有一个 .NET Framework 控制台应用程序,我正在尝试更新到 .NET 5,但它在需要来自 .NET 的数据的某些点上失败app.config

关于配置如何工作的相关 文档现在非常有帮助,将其所有示例都作为控制台应用程序...直到您真正查看示例为止,这些示例完全没有帮助。它们都基于一个Main如下所示的块:

        static async Task Main(string[] args)
        {
            using IHost host = CreateHostBuilder(args).Build();

            // Application code should start here.

            await host.RunAsync();
        }
Run Code Online (Sandbox Code Playgroud)

控制台应用程序不是 WinForms 应用程序。应用程序代码不会在 Main 中“启动”;Main是程序的主体,这意味着将使配置真正起作用的行放在方法的末尾意味着在程序准备终止之前它永远不会被命中!

我缺少什么?这些文档示例看起来完全没有意义。我不想提供任何服务;我只是希望现有的配置app.config在启动时被读取并可供配置系统使用,这与它在 .NET Framework 中的工作方式完全相同。恢复旧行为的正确方法是什么?

Zac*_*ins 6

设置配置应该非常简单,配置生成器提供了更多选项,但这里是这个示例的基本内容。

IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();
Run Code Online (Sandbox Code Playgroud)

如果你想在你的应用程序中使用 DI 模式,那么使用IOptions方法,在你的构造函数中只要求IOptions<OptionConfig>,否则你可以注入IConfiguration不推荐

var serviceProvider = new ServiceCollection()
    .AddSingleton<IConfiguration>(config)
    .Configure<OptionConfig>(config.GetSection("ExampleSection"));
    .BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)

当然,您需要使用服务提供者输入第一个依赖项,以实质上构建您的“应用程序依赖关系树”


编辑 对于那些希望 .net core 项目像旧配置(.net Framework)一样工作的人。

如果您想使用,ConfigurationManager您可以使用 Nuget Package 向开发人员提供System.Configuration.ConfigurationManager。确保将配置文件包含为app.config,配置应如下所示。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="appconfigtest" value="abc" />
    </appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)