我在項目中添加了一個XML文件,我將其用作數據庫。 我已經將它設置爲嵌入式資源。 一切工作正常,直到我在我的開發環境。嵌入式資源XML文件不在安裝文件夾中複製
但是,當我發佈它並將其安裝到我的機器中時,XML文件不會自動複製到安裝路徑,因此它開始給出錯誤,表明它找不到該文件。
在Windows應用程序中使用XML文件存儲和檢索數據的正確方法是什麼以及我在做什麼錯誤?
在此先感謝!
我在項目中添加了一個XML文件,我將其用作數據庫。 我已經將它設置爲嵌入式資源。 一切工作正常,直到我在我的開發環境。嵌入式資源XML文件不在安裝文件夾中複製
但是,當我發佈它並將其安裝到我的機器中時,XML文件不會自動複製到安裝路徑,因此它開始給出錯誤,表明它找不到該文件。
在Windows應用程序中使用XML文件存儲和檢索數據的正確方法是什麼以及我在做什麼錯誤?
在此先感謝!
找到解決方案!
我所做的是,使我的xml文件資源類型Content
並將Copy to Output Directory
設置爲Copy Always
,使其可根據@tencntraze評論進行編輯。 但是,當我發佈並安裝它時,它在嘗試讀取FileNotFoundException
時仍然拋出相同的異常。
然後我發現的主要伎倆,我去
屬性>發佈(標籤)>應用程序文件(按鈕)>改變Publish Status
爲我的文件從Data File
到Include
和它的工作!
謝謝!
嵌入式資源的重點在於它不會複製到輸出目錄,而是嵌入到可執行文件中。最快的解決辦法是改變你的邏輯從組件讀取(注意,這個假設它嵌入在同一程序的可執行文件):
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涵蓋的話題很好,基本上具有相同的代碼(偉大的思想......),但更好的解釋如何使用它,以及你需要注意什麼。
謝謝!我可以像這樣獲取文件並可以讀取它,但我無法對文件內容進行任何更改。它允許我更改內容並保存它,但是當我獲取它時,我的更改丟失了 –
由於嵌入式資源已編譯到您的程序集中,因此無法編輯它們。如果你想改變它,我會使用不同的資源類型(即'內容'),並將「複製到輸出目錄」設置爲「始終複製」或「如果更新複製」 – Matt
當我這樣做時,它開始給予相同的例外,'FileNoFoundException' :( –
什麼是錯誤?併發布「無法找到文件」的代碼。 –
它只是給出錯誤,它無法找到路徑中的文件,並給出安裝路徑。這是我用來閱讀文件的簡單代碼'XDocument doc = XDocument.Load(「MasterData.xml」);' –
@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)' –