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

如何在Visual Studio的Xamarin.Forms项目中加载嵌入式资源XML文件?

解决Xamarin.Forms中嵌入式XML文件加载失败的问题

嘿,我明白你现在卡在哪啦——把XML文件设为嵌入式资源后,直接用XDocument.Load("Data.xml")肯定加载失败,因为嵌入式资源不是存在文件系统里的普通文件,得通过程序集的资源流来读取才行。

我给你一步步说正确的操作方式:

第一步:确认资源属性设置

先再核对下你的Data.xml文件属性:右键文件→属性→生成操作,确保已经选中Embedded Resource(这一步你应该已经做了,但再确认下没出错)。

第二步:通过程序集资源流加载XML

嵌入式资源的访问标识是「项目命名空间+文件名」,你的项目命名空间是App14,所以完整的资源名称应该是App14.Data.xml。接下来通过程序集获取这个资源的流,再用XDocument.Load()加载流就可以了。

修改后的ListMain页面代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection; // 新增引用,因为要用到Assembly类
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.Xml.Linq;
using Xamarin.Forms.Xaml;

namespace App14
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class ListMain : ContentPage
    {
        public List<string> Students;

        public ListMain()
        {
            InitializeComponent();
            Students = new List<string>();

            // 获取当前程序集
            var assembly = Assembly.GetExecutingAssembly();
            // 嵌入式资源的完整名称:命名空间 + 文件名
            string resourceName = "App14.Data.xml";

            // 加载资源流并读取XML
            using (var stream = assembly.GetManifestResourceStream(resourceName))
            {
                if (stream == null)
                {
                    // 找不到资源时的容错处理,方便调试
                    throw new Exception($"无法定位嵌入式资源:{resourceName}");
                }
                XDocument xDoc = XDocument.Load(stream);

                foreach (XElement xe in xDoc.Element("students").Elements("mainStudent"))
                {
                    Students.Add(xe.Element("student").Value);
                }
            }

            foreach (string student in Students)
            {
                stackLayout.Children.Add(new Label { Text = student, FontSize = 20, HorizontalOptions = LayoutOptions.StartAndExpand });
                stackLayout.Children.Add(new Label { Text = "DEL", FontSize = 20, HorizontalOptions = LayoutOptions.End });
            }
        }
    }
}

小技巧:确认资源名称是否正确

如果你不确定资源名称是不是准确,可以加一段代码列出所有嵌入式资源,方便排查:

var allResources = Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (var name in allResources)
{
    Console.WriteLine(name); // 在输出窗口查看所有资源名称
}

这样就能精准找到你的Data.xml对应的资源标识啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:31