You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 5控制台应用中正确配置,还原.NET Framework的app.config读取行为

解决方案

方案1:完全复刻.NET Framework旧行为(零业务代码改动)

这是最适配你需求的方案,不需要接入新的.NET配置体系,原有读写app.config的代码可以完全保留:

  • 首先安装NuGet包 System.Configuration.ConfigurationManager
  • 确保项目根目录下的app.config文件属性设置为:复制到输出目录 = 如果较新则复制
  • 原有代码直接复用即可,比如ConfigurationManager.AppSettings["你的配置键"]、ConfigurationManager.ConnectionStrings["你的连接串名"]的调用逻辑完全不需要修改,和.NET Framework下的行为完全一致。

方案2:接入新配置系统(无需通用主机)

如果你后续需要支持多配置源、环境变量、命令行参数等新特性,也可以不引入通用主机,直接在Main入口初始化配置:

  • 先安装必要的NuGet包:Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Xml
  • 在Main方法最开始构造配置对象,之后直接在业务逻辑中读取即可:
static void Main(string[] args)
{
    IConfiguration config = new ConfigurationBuilder()
        .AddXmlFile("app.config", optional: false, reloadOnChange: true)
        // 可以根据需要添加其他配置源,比如AddJsonFile、AddEnvironmentVariables等
        .Build();

    // 你的原有业务逻辑直接从这里开始写,直接读取config即可
    var configValue = config.GetSection("appSettings:add:你的配置键").Value;
}

关于官方文档示例的说明

官方示例中的await host.RunAsync()仅适用于需要运行长期后台托管服务的场景,普通一次性控制台程序完全不需要调用这行代码。如果你非要使用通用主机的初始化逻辑,只需要在host.Build()完成后直接从依赖注入容器中取出配置对象使用即可,所有业务逻辑都可以写在host.RunAsync()之前,不需要等待主机运行。
示例如下:

static void Main(string[] args)
{
    using IHost host = CreateHostBuilder(args).Build();
    // 直接取出配置使用
    var config = host.Services.GetRequiredService<IConfiguration>();

    // 你的所有业务逻辑写在这里,执行完成后程序直接退出即可
    // 不需要添加host.RunAsync()调用
}

内容的提问来源于stack exchange,提问作者Mason Wheeler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:21:02