You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maui/Blazor跨项目加载XML文件时路径获取失败求助

MAUI/Blazor跨工程加载data.xml文件的解决方案

问题原因

Assembly.GetExecutingAssembly().Location在MAUI/Blazor环境下(比如WebAssembly模式、AOT编译)经常返回null,因为程序集可能直接加载到内存中,没有对应的本地文件路径。另外跨工程文件如果未正确配置属性,也无法通过路径访问。

方案一:嵌入资源方式(推荐)

这种方式将xml文件打包到程序集里,无需依赖文件路径,兼容性更好。

  1. 配置文件属性

    • 在data.xml所在的项目中,右键文件→选择「属性」
    • 将「生成操作」设置为嵌入的资源
    • 将「复制到输出目录」设置为「不复制」
  2. 修改加载代码
    注意资源名称格式为[项目默认命名空间].[文件夹层级].[文件名],比如项目默认命名空间是MyCompany.DemoData,文件在Data/demodata/data.xml,则资源名为MyCompany.DemoData.Data.demodata.data.xml。

XmlDocument doc = new XmlDocument();
// 用DemoData类所在的程序集来获取资源,确保指向data.xml所在的项目
var targetAssembly = typeof(DemoData).Assembly;
// 替换为实际的资源名称
string resourceFullName = "MyCompany.DemoData.Data.demodata.data.xml";

using (var resourceStream = targetAssembly.GetManifestResourceStream(resourceFullName))
{
    if (resourceStream == null)
    {
        throw new FileNotFoundException("未找到指定的嵌入资源", resourceFullName);
    }
    doc.Load(resourceStream);
}

方案二:文件复制到应用目录

如果必须通过文件路径加载,可将文件复制到MAUI的应用数据目录:

  1. 配置文件属性

    • 在data.xml所在项目中,右键文件→「属性」
    • 将「复制到输出目录」设置为「始终复制」
  2. 复制文件到应用目录(MAUI启动时执行)

// 在MAUI的App.xaml.cs的OnStartup或Main方法中添加
string sourcePath = Path.Combine(AppContext.BaseDirectory, "Data", "demodata", "data.xml");
string targetPath = Path.Combine(FileSystem.AppDataDirectory, "Data", "demodata", "data.xml");

// 确保目标目录存在
Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
// 复制文件(避免重复复制)
if (!File.Exists(targetPath))
{
    File.Copy(sourcePath, targetPath);
}
  1. 加载文件
XmlDocument doc = new XmlDocument();
string filePath = Path.Combine(FileSystem.AppDataDirectory, "Data", "demodata", "data.xml");
doc.Load(filePath);

内容的提问来源于stack exchange,提问作者Dakxin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:05:52