如何从解决方案中的文件加载XML文件,使用嵌入式资源构建?

时间:2011-12-06 20:58:42

标签: c# .net xml linq-to-xml

以下是我的解决方案概要:

enter image description here

我已将构建设置为Embedded Resource,当我生成应用程序时,XML文件不会出现在/ Release文件夹中。这是正确的,我想要这种行为。

现在我试图将该文件加载到XDocument中,以便我可以解析其中的数据:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Parsing XML.");

        XDocument championXml = XDocument.Load("Champions.xml");

        Console.ReadKey();
    }
}

我收到文件未找到错误,因为它试图在发布文件夹的完整路径中找到xml文件。

如何将此数据正确加载到我的XDocument中?

3 个答案:

答案 0 :(得分:4)

使用GetManifestResourceStream()

var asm = Assembly.GetExecutingAssembly();
using(var stream = asm.GetManifestResourceStream("Namespace.Champions.xml"))
{
    // ...
}

可以通过调用GetManifestResourceNames()找到用于引用资源的确切名称。

答案 1 :(得分:2)

直接引用资源属性并使用Parse而不是load:

XDocument championXml = XDocument.Parse(Properties.Resources.ChampionsXML);
                                                             ^^^^^^^^^^^^
                                           //Name of your resource |

根据您的项目结构,命名空间会有所不同。

答案 2 :(得分:1)

你应该从汇编中获取流:

Assembly.GetExecutingAssembly().GetManifestResourceStream(name)

其中name将是:'LinqToXml.Champions.xml'