.NET MAUI Android应用中appsettings.json未复制到设备的求助
.NET MAUI Android中appsettings.json未加载问题的解决方法
核心问题说明
嵌入式资源是打包进程序集的,不会以独立文件形式出现在设备的文件系统中,所以你在/data/data/com.companyname.mauiapp1/files/.__override__里找不到是正常的,不需要在那里查找,只需通过代码读取嵌入的资源流即可。
具体修复步骤
1. 确认嵌入式资源的正确名称
嵌入式资源的名称规则是项目默认命名空间.文件名,你可以通过以下代码打印所有嵌入式资源名称,找到你的appsettings.json对应的正确路径:
var assembly = System.Reflection.Assembly.GetExecutingAssembly(); foreach (var resName in assembly.GetManifestResourceNames()) { System.Diagnostics.Debug.WriteLine($"嵌入式资源名称:{resName}"); }
运行后查看输出窗口,找到类似MauiApp1.appsettings.json的条目,这就是你需要传入GetManifestResourceStream的参数。
2. 正确设置文件属性
- 将appsettings.json放在项目根目录
- 在属性窗口中设置:
- Build Action:
Embedded Resource - Copy to Output Directory:
Copy Always
- Build Action:
3. 修正配置加载代码
根据第一步得到的正确资源名称,修改你的配置加载代码:
var assembly = System.Reflection.Assembly.GetExecutingAssembly(); using var stream = assembly.GetManifestResourceStream("MauiApp1.appsettings.json"); // 替换为你实际的资源名称 if (stream == null) { System.Diagnostics.Debug.WriteLine("未找到appsettings.json嵌入式资源"); return; } var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder() .AddJsonStream(stream) .Build(); builder.Configuration.AddConfiguration(config);
额外提示
如果尝试将文件放在Resources/Raw目录,Build Action应设为MauiAsset,读取方式会改为通过FileSystem.OpenAppPackageFileAsync,但嵌入式资源的方式更匹配你当前的代码逻辑。
内容的提问来源于stack exchange,提问作者D. Kermott
相关产品推荐
相关产品推荐

