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

MAUI启动时如何从appsettings.json加载应用配置?

MAUI 读取MauiAsset类型appsettings.json配置的解决方案

无需修改生成操作

你当前把appsettings.json设置为MauiAsset的操作是正确的,不需要更换生成操作。

缺少AddJsonFile扩展的原因

AddJsonFile扩展方法属于Microsoft.Extensions.Configuration.Json包,默认MAUI模板没有内置这个包,手动安装对应版本的NuGet包即可。如果需要强类型配置绑定,还可以额外安装Microsoft.Extensions.Configuration.Binder包。

正确读取配置的实现步骤

  • 确认appsettings.json属性设置:生成操作选择MauiAsset,复制到输出目录选择如果较新则复制,注意文件名大小写(Android平台文件路径大小写敏感)
  • 在ConfigureAppConfiguration委托中通过MAUI提供的文件系统API读取配置文件流,再通过AddJsonStream方法加入配置源,示例代码如下:
public void Configure(IAppHostBuilder appBuilder)
{
    appBuilder
        .ConfigureAppConfiguration((app, config) =>
        {
            // 读取已设置为MauiAsset的appsettings.json文件
            using var configStream = FileSystem.OpenAppPackageFileAsync("appsettings.json").Result;
            config.AddJsonStream(configStream);
            
            // 若存在多环境配置文件,可按相同逻辑追加
            // var env = app.HostingEnvironment.EnvironmentName;
            // using var envConfigStream = FileSystem.OpenAppPackageFileAsync($"appsettings.{env}.json").Result;
            // config.AddJsonStream(envConfigStream, optional: true);
        })
        .ConfigureServices((context, svcs) =>
        {
            // 1. 直接注入IConfiguration即可读取配置
            // 2. 强类型配置绑定示例(需安装Microsoft.Extensions.Configuration.Binder)
            // svcs.Configure<AppConfig>(context.Configuration.GetSection("AppConfig"));
        })
        .UseMauiApp<App>();
}

注意:如果担心异步方法直接调用Result引发死锁,也可以提前将文件读取为字节数组再包装成MemoryStream传入,MAUI场景下OpenAppPackageFileAsync属于IO密集型轻量操作,直接调用Result不会有问题。

配置使用方式

配置源添加完成后,就可以在应用任意服务或页面中通过依赖注入获取IConfiguration实例读取配置,比如:

public class MyService
{
    public MyService(IConfiguration config)
    {
        var apiUrl = config["Api:BaseUrl"];
    }
}

如果使用了强类型绑定,还可以通过IOptions<AppConfig>注入获取类型安全的配置对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:24:02