从另一个项目加载资源?

时间:2011-12-05 16:56:43

标签: c# xml windows-phone-7 xna linq-to-xml

我正在尝试从单独的项目加载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.xml更改为Chronos.Text.xml,因为这是文件所在的位置。在我的调试器中,我看到当我将其用作路径时,流只返回null:

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 个答案:

答案 0 :(得分:1)

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

如果您尝试从其他目录打开XML文件,则必须提供{strong>完整路径XDocument.Load(),或者指向当前项目输出目录的相对路径那个目录。

另一种解决方案是将其他项目中的数据复制到项目中,并指定您希望将文件复制到输出目录。