C# 如何在Windows窗体应用程序中将XML文件用作读写资源

C# 如何在Windows窗体应用程序中将XML文件用作读写资源,c#,xml,resources,linq-to-xml,C#,Xml,Resources,Linq To Xml,我正在用C编写一个小的Windows窗体应用程序,它使用了一些资源。其中一个资源是XML文件 应该在初始化第一个表单之前读取此XML文件。 XML文件的内容用于创建应用程序使用的对象 通常我会在VisualStudio中添加此XML文件作为资源 项目属性>资源>文件>添加现有文件 然后在应用程序中,我可以通过以下命令读取XML文件的内容:XDocument.ParseResources.NameOfXMLResource 在这个应用程序中,我希望能够添加或更新对象,这也应该更新XML文件中存储的

我正在用C编写一个小的Windows窗体应用程序,它使用了一些资源。其中一个资源是XML文件

应该在初始化第一个表单之前读取此XML文件。 XML文件的内容用于创建应用程序使用的对象

通常我会在VisualStudio中添加此XML文件作为资源

项目属性>资源>文件>添加现有文件

然后在应用程序中,我可以通过以下命令读取XML文件的内容:XDocument.ParseResources.NameOfXMLResource

在这个应用程序中,我希望能够添加或更新对象,这也应该更新XML文件中存储的信息。我知道我无法将更新后的XML文件保存到Resources.NameOfXMLResource,因为它实际上是一个包含XML文件所有内容的字符串

我看过很多关于在C项目中将XML作为资源的文章,但大多数文章都只是关于从资源中读取而不是写入资源

所以我的问题是:如何设置XML文件

作为我可以读/写的资源; 或

当我运行setup.msi将.exe文件安装到所需位置时,将其存储在安装文件夹中的某个位置。使用这种方法,我需要具有读/写访问权限,并且能够在不首先安装的情况下调试项目 我当前用于读取/写入XML文件的代码:

this.file = Resources.XMLItemList;

public List<ItemModel> GetStoredItems()
{
  return (from item in XDocument.Load(this.file).Descendants("Item")
          select new ItemModel
          {
            Name = item.Attribute("Name").Value,
            ID = item.Element("ID").Value,
            Description = item.Element("Description").Value,
            Size = Convert.ToInt32(item.Element("Size").Value),
            Path = item.Element("Path").Value
          }).ToList();
}

public string AddItem(ItemModel item)
{
  try
  {
    var xdoc = XDocument.Load(this.file);
    xdoc.Element("Items").Add(new XElement("Item",
                              new XAttribute("Name", item.Name),
                              new XElement("ID", item.ID),
                              new XElement("Description", item.Description),
                              new XElement("Size", item.Size),
                              new XElement("Path", item.Path)));
    xdoc.Save(this.file);
    return null;
  }
  catch (Exception ex)
  {
    return string.Format(Resources.ErrCanNotAddItemToXML, ex);
  }
}

读写一个资源文件听起来是一个很难甚至不可能实现您所需要的方法。资源被编译成DLL读取。您不认为一个简单的XML文件或您自己的自定义部分就足够了吗?就安装程序而言,我不明白您为什么要调试已安装版本的程序?@Ruskin,我已经担心它可能无法作为资源实现。调试部分的要点是,当我构建并运行程序而不创建安装程序时,它将从./bin/debug文件夹运行.exe。在这种情况下,找不到XML文件的路径。当我使用安装程序时,可以找到路径。但是我没有写权限啊,好吧,你的安装程序可以/应该与你的程序解耦。通过调试器运行时,只需使用文件上的copy to output directory指令将文件复制到out目录即可。该路径应作为参数传递到模块中,该模块负责读取/写入该文件。现在,安装程序将该文件放在何处无关紧要:。是的,您需要在安装期间整理您的访问权限,但这是一个单独的问题:。啊,是的。我在“资源”上有构建操作指令,我必须将其更改为“内容”。我现在要做的就是获得安装目录及其内容的正确权限:感谢您指出这一点。