如何在MSIX包中正确包含WPF .NET Core应用的依赖文件?
解决MSIX打包后WPF .NET Core应用加载配置文件失败的问题
核心问题原因
MSIX应用运行在沙箱环境中,默认工作目录是System32,而非可执行文件所在目录。你直接使用/Resources/xxx.json这类硬编码路径,会被解析到System32下,自然找不到目标文件。而XAML中的图片能正常加载,是因为WPF的资源查找机制会自动定位到应用安装目录的资源路径,和代码里直接调用File.ReadAllText的文件系统访问逻辑完全不同。
解决方案步骤
1. 修正配置文件路径获取逻辑
不要硬编码路径,通过应用程序基目录拼接正确的文件路径:
- 用
AppContext.BaseDirectory获取可执行文件所在的MSIX安装目录 - 借助
Path.Combine拼接资源路径,保证跨平台兼容性
示例代码替换:
// 原错误写法 var configPath = "/Resources/PatientInformationLeafletConfiguration.json"; // 修正后写法 var configPath = Path.Combine(AppContext.BaseDirectory, "Resources", "PatientInformationLeafletConfiguration.json"); var config = SerializationService.FromJSONFile<PatientInformationLeafletConfig>(configPath);
2. 确保配置文件被正确打包
- 在主WPF项目中选中所有配置文件(.json、.csv等),在属性窗口设置:
- 复制到输出目录:选择「始终复制」或「如果较新则复制」
- 生成操作:选择「内容」
- 检查MSIX打包项目的「应用程序」选项卡,确认已包含主WPF项目的输出,确保资源文件会同步打包到MSIX包内的对应路径。
3. 验证包内文件结构
安装MSIX后,可打开C:\Program Files\WindowsApps\<你的包名>(需开启显示隐藏文件并获取目录权限),检查是否存在Resources目录,且配置文件是否在该目录下,以此确认打包是否正确。
额外注意事项
MSIX包的安装目录是只读的,如果需要修改配置文件,不能直接写入这个目录,需先将文件复制到ApplicationData.Current.LocalFolder等沙箱可写入目录后再操作。如果仅需读取配置,上述方案完全适用。
内容的提问来源于stack exchange,提问作者user1752971
相关产品推荐
相关产品推荐

