我正在尝试从单独的项目加载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
}
答案 0 :(得分:1)
嵌入资源直接嵌入可执行文件中。 Assembly.GetManifestResourceStream()
正在尝试在嵌入资源上打开一个流,您应该提供的是以下格式AssemblyDefaultNamespace.Directory.Filename
的资源名称。
如果您尝试从其他目录打开XML文件,则必须提供{strong>完整路径XDocument.Load()
,或者指向当前项目输出目录的相对路径那个目录。
另一种解决方案是将其他项目中的数据复制到项目中,并指定您希望将文件复制到输出目录。