.NET MAUI安卓模拟器加载文本文件触发TargetInvocationException问题
.NET MAUI安卓端文本文件加载问题解决方法
你的问题核心是:Windows平台下Copy to Output Directory会将文件直接放到可访问路径,但安卓平台下,这个设置只会把文件打包进APK的只读资源目录,不会自动复制到可读写的AppDataDirectory,所以需要手动完成文件复制步骤。
步骤1:调整文件存放位置与属性
- 将
erv.txt移动到项目的Resources/Raw目录(如果没有Raw文件夹,直接新建) - 选中文件,在属性窗口设置:
- Build Action:设为
MauiAsset - Copy to Output Directory:设为
Copy always或Copy if newer
- Build Action:设为
步骤2:修改加载代码,添加资源复制逻辑
将原代码替换为以下逻辑:先检查AppDataDirectory中是否存在目标文件,不存在则从应用包资源中复制过去,再进行读取:
string appDataFilePath = Path.Combine(FileSystem.Current.AppDataDirectory, "erv.txt"); // 若AppData中无文件,从Raw资源复制到可读写目录 if (!File.Exists(appDataFilePath)) { using var resourceStream = await FileSystem.Current.OpenAppPackageFileAsync("erv.txt"); using var fileStream = File.Create(appDataFilePath); await resourceStream.CopyToAsync(fileStream); } // 正常读取文件 using (StreamReader sr = File.OpenText(appDataFilePath)) { // 后续读取逻辑 }
可选:通过项目文件配置(替代属性窗口设置)
如果偏好直接编辑项目文件,可添加如下配置:
<ItemGroup> <MauiAsset Include="Resources\Raw\erv.txt"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </MauiAsset> </ItemGroup>
这样就能确保安卓平台运行时,文件被正确复制到可访问的AppDataDirectory,避免找不到文件的异常。
内容的提问来源于stack exchange,提问作者Arturo Girona
相关产品推荐
相关产品推荐

