2011-12-05 67 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