如何在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
相关产品推荐
相关产品推荐

