C# 从另一个项目加载资源?

C# 从另一个项目加载资源?,c#,xml,windows-phone-7,xna,linq-to-xml,C#,Xml,Windows Phone 7,Xna,Linq To Xml,我试图从一个单独的项目加载一个XML文件;其中一个项目是一个游戏引擎,它调用XML文档读取器并获取一个路径,该路径指定文件的相对目录 来自发动机 XDocument doc; try { Stream stream = this.GetType().Assembly.GetManifestResourceStream(path); doc = XDocument.Load(stre

我试图从一个单独的项目加载一个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
的方法。当发生这种情况时,
文件路径
只需向下通过层即可

我已经看过并尝试了嵌入式资源示例,这是我最终想要实现的,但它对我来说不起作用

我做错了什么,在这里

更新

XDocument doc;

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

                doc = XDocument.Load(stream);
            }
            catch
            {
                doc = XDocument.Load(path);
            }
我将
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
}

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

如果试图从其他目录打开XML文件,则必须提供指向
XDocument.Load()
完整路径,或当前项目输出目录指向该其他目录的相对路径


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

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

如果试图从其他目录打开XML文件,则必须提供指向
XDocument.Load()
完整路径,或当前项目输出目录指向该其他目录的相对路径


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

是否存在AssemblyDefaultNamespace?我似乎找不到它。右键单击树中的项目,选择
properties
<代码>应用程序选项卡,右上角有一个名为
默认名称空间
的选项。我更新了我的答案:不幸的是,在这个过程中,我收到的所有信息都是空的。我还可以做些什么来修改查询吗?确保在目录名之前添加了默认名称空间。是否有AssemblyDefaultNamespace这样的东西?我似乎找不到它。右键单击树中的项目,选择
properties
<代码>应用程序选项卡,右上角有一个名为
默认名称空间
的选项。我更新了我的答案:不幸的是,在这个过程中,我收到的所有信息都是空的。我还可以做些什么来修改查询吗?请确保在目录名之前添加了默认名称空间。