以下是我的解决方案概要:
我已将构建设置为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中?
答案 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'