.NET Maui安卓模拟器中appsetting.json目录配置问题求助
针对.NET Maui安卓端启动异常的排查与解决方案
一、配置文件的正确处理
- 将
appsettings.json放在项目根目录,右键设置文件属性:- 生成操作:
Embedded resource - 复制到输出目录:
如果较新则复制
- 生成操作:
- 若选择放到
Resources\Raw目录,需将生成操作改为MauiAsset,读取时用FileSystem.OpenAppPackageFileAsync方法
二、适配安卓的配置读取代码
Windows端直接读取文件的逻辑不适配安卓,需从嵌入资源读取,示例代码:
var assembly = typeof(App).GetTypeInfo().Assembly; using var stream = assembly.GetManifestResourceStream("你的项目命名空间.appsettings.json"); var config = new ConfigurationBuilder() .AddJsonStream(stream) .Build();
可通过assembly.GetManifestResourceNames()打印所有嵌入资源名称,确认配置文件的完整命名(命名空间+文件名)是否正确。
三、Microsoft Graph安卓端专属配置
- 在
AndroidManifest.xml添加网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 配置OAuth重定向URI与Intent过滤器:
重定向URI需设置为msal{你的客户端ID}://auth,并在AndroidManifest.xml中添加:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="msal{你的客户端ID}" /> </intent-filter>
四、定位具体异常原因
- 打开Visual Studio的输出窗口,切换到
Debug输出,查看安卓启动时的完整异常栈 - 在
App.xaml.cs的OnStart方法中添加捕获逻辑:
protected override void OnStart() { try { // 你的初始化代码(配置读取、Graph客户端创建等) } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"启动异常:{ex.Message}\n{ex.StackTrace}"); } }
五、验证嵌入资源加载状态
添加代码确认配置文件是否被正确嵌入:
var assembly = typeof(App).GetTypeInfo().Assembly; var resourceNames = assembly.GetManifestResourceNames(); foreach (var name in resourceNames) { System.Diagnostics.Debug.WriteLine($"嵌入资源:{name}"); }
若未找到目标配置文件,检查文件属性的生成操作是否设置正确,或命名空间是否匹配。
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

