WINUI3应用打包后自定义文件/图片无法加载问题求助
解决WinUI3打包后读取自定义文件的权限拒绝问题
问题根源
WindowsApps目录是WinUI3/MSIX应用的受保护安装目录,应用自身拥有该目录的读取权限,但出现权限错误通常是两个原因:
- 文件未被正确包含到安装包中
- 使用了非WinUI3推荐的路径获取方式(如
AppDomain.CurrentDomain.BaseDirectory),导致路径解析异常
可行解决方案
1. 确保文件被正确打包进安装包
- 对所有自定义文件(文本、图片)设置以下属性:
- Build Action:设为
Content - Copy to Output Directory:设为
Copy if newer或Copy always
- Build Action:设为
- 若使用单独的MSIX打包项目,需确认打包项目已包含主项目的Assets目录(通常通过引用主项目自动同步,也可手动检查打包项目的文件列表)
- 验证方式:将生成的MSIX安装包后缀改为
.zip并解压,检查是否存在Assets/Contents/Docs/Countries.txt等目标文件
2. 使用WinUI3标准API获取安装目录
放弃AppDomain.CurrentDomain.BaseDirectory,改用UWP/WinUI3官方推荐的Package.Current.InstalledLocation获取应用安装目录,该API能准确解析打包后的路径,且避免权限问题:
异步读取(推荐,符合WinUI3异步模型)
using Windows.ApplicationModel; using Windows.Storage; public async Task<string> ReadCountriesFileAsync() { // 获取应用安装目录 StorageFolder installFolder = Package.Current.InstalledLocation; // 获取目标文件 StorageFile countriesFile = await installFolder.GetFileAsync(@"Assets\Contents\Docs\Countries.txt"); // 读取文件内容 return await FileIO.ReadTextAsync(countriesFile); }
同步读取(仅在特殊场景下使用)
using Windows.ApplicationModel; using System.IO; public string ReadCountriesFile() { // 获取安装目录路径 string installPath = Package.Current.InstalledLocation.Path; string countriesListPath = Path.Combine(installPath, @"Assets\Contents\Docs\Countries.txt"); // 同步读取文件 return File.ReadAllText(countriesListPath); }
3. 额外排查步骤
- 若仍触发权限错误,检查应用的
Package.appxmanifest,确认没有误加限制类权限(读取自身安装目录无需额外权限,但需确保未禁用基础文件访问) - 确认主项目和打包项目的目标Windows版本一致(如均为Windows 10 19041+)
内容的提问来源于stack exchange,提问作者Anynomus
相关产品推荐
相关产品推荐

