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
相关产品推荐
相关产品推荐

