2014-02-26 66 views
1

我在項目中添加了一個XML文件,我將其用作數據庫。 我已經將它設置爲嵌入式資源。 一切工作正常,直到我在我的開發環境。嵌入式資源XML文件不在安裝文件夾中複製

但是,當我發佈它並將其安裝到我的機器中時,XML文件不會自動複製到安裝路徑,因此它開始給出錯誤,表明它找不到該文件。

在Windows應用程序中使用XML文件存儲和檢索數據的正確方法是什麼以及我在做什麼錯誤?

在此先感謝!

+0

什麼是錯誤?併發布「無法找到文件」的代碼。 –

+0

它只是給出錯誤,它無法找到路徑中的文件,並給出安裝路徑。這是我用來閱讀文件的簡單代碼'XDocument doc = XDocument.Load(「MasterData.xml」);' –

+0

@DourHighArch - 這是確切的錯誤 'System.IO.FileNotFoundException:找不到文件'C:\用戶\用戶\應用程序數據\本地\應用\ 2.0 \ PV8CYYPD.1XE \ GZQP92CW.WWV \ code..tion_0000000000000000_0001.0000_a42745f5ded40bd9 \ MasterData.xml'。 System.IO中的文件名:'C:\ Users \ User \ AppData \ Local \ Apps \ 2.0 \ PV8CYYPD.1XE \ GZQP92CW.WWV \ code..tion_0000000000000000_0001.0000_a42745f5ded40bd9 \ MasterData.xml' .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)' –

回答

1

找到解決方案!

我所做的是,使我的xml文件資源類型Content並將Copy to Output Directory設置爲Copy Always,使其可根據@tencntraze評論進行編輯。 但是,當我發佈並安裝它時,它在嘗試讀取FileNotFoundException時仍然拋出相同的異常。

然後我發現的主要伎倆,我去

屬性>發佈(標籤)>應用程序文件(按鈕)>改變Publish Status爲我的文件從Data FileInclude

和它的工作!

謝謝!

0

嵌入式資源的重點在於它不會複製到輸出目錄,而是嵌入到可執行文件中。最快的解決辦法是改變你的邏輯從組件讀取(注意,這個假設它嵌入在同一程序的可執行文件):

using (Stream stream = this.GetType().Assembly.GetManifestResourceStream(filename)) // Needs to account for folder paths, etc 
{ 
    using (StreamReader sr = new StreamReader(stream)) 
    { 
     string xml = sr.ReadToEnd(); 

     // Do stuff 
    } 
} 

編輯:This SO question涵蓋的話題很好,基本上具有相同的代碼(偉大的思想......),但更好的解釋如何使用它,以及你需要注意什麼。

+0

謝謝!我可以像這樣獲取文件並可以讀取它,但我無法對文件內容進行任何更改。它允許我更改內容並保存它,但是當我獲取它時,我的更改丟失了 –

+0

由於嵌入式資源已編譯到您的程序集中,因此無法編輯它們。如果你想改變它,我會使用不同的資源類型(即'內容'),並將「複製到輸出目錄」設置爲「始終複製」或「如果更新複製」 – Matt

+0

當我這樣做時,它開始給予相同的例外,'FileNoFoundException' :( –

相關問題