2011-12-05 66 views
1

我想从一个单独的项目中加载一个XML文件;其中一个项目是一个游戏引擎,它调用XML文档阅读器并引入一个指定文件相对目录的路径。从另一个项目加载资源?

从发动机

XDocument doc; 

      try 
      { 
       Stream stream = this.GetType().Assembly.GetManifestResourceStream(path); 

       doc = XDocument.Load(stream); 
      } 
      catch 
      { 
       doc = XDocument.Load(path); 
      } 

从其他项目

string filePath = "Test.xml"; 

Npc npc = new Npc("somename", 2,filePath); 

Test.xml驻留在其他项目的根目录。 Npc构造函数调用Statistics对象构造函数,然后调用加载XDocument的方法。发生这种情况时,filePath只是向下穿过层。

我已经看过this,并尝试了嵌入式资源示例,这最终是我试图完成的任务,并且它不适用于我。

我在做什么错,在这里?

更新

我改变Text.xmlChronos.Text.xml,因为这是该文件所在。在我的调试器中,我看到当我将该路径用作路径时,流简单地返回空值:

try 
{ 
    Stream stream = this.GetType().Assembly.GetManifestResourceStream("Chronos.Test.xml"); //returns null 

    doc = XDocument.Load(stream); //Exception thrown 
} 
catch 
{ 
    doc = XDocument.Load(path); //File not found 
} 

回答

1

嵌入式资源直接嵌入可执行文件中。 Assembly.GetManifestResourceStream()正尝试在嵌入式资源上打开流,您应该提供的资源名称格式为AssemblyDefaultNamespace.Directory.Filename

如果你试图打开从另一个目录中的XML文件,你将不得不提供从当前项目输出目录的相对路径指向其他目录路径XDocument.Load(),或。

另一种解决方案是将数据从另一个项目复制到项目中,并指定要将文件复制到输出目录。

+1

AssemblyDefaultNamespace是否有这样的事情?我似乎无法找到它。 – zeboidlund

+0

右键单击树中的项目,选择“属性”。 'Application'选项卡上,右上角有一个名为'Default namespace'的选项。 – Coincoin

+0

我更新了我的答案:不幸的是,我收到的所有内容都是空的。还有什么我可以做的修改查询? – zeboidlund