隱藏設定檔內容 - 內嵌資源
開發專案時,某些系統資訊(如連線字串、系統參數等資訊)會選擇寫在XML檔或是文字檔, 例如我們常常使用的App.config,一來是集中管理,一目瞭然;
另外修改參數也方便。但也造成系統資訊暴露,如果想要隱藏設定檔的內容,可以考慮將設定檔編譯成內嵌資源。
以Winform專案的App.config為例。
我在App.config加入以下內容…
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="My_Name" value="JB" />
</appSettings>
</configuration>
(A)
直接讀取
使用System.Configuration.ConfigurationManager
可以很快的將我們的系統參數讀取出來。
PS. 需先加入參考System.configuration。/*************************************** * 直接讀取 ***************************************/ String sName = System.Configuration.ConfigurationManager.AppSettings["My_Name"].ToString(); MessageBox.Show(sName);
結果:
(B)
接下是使用內嵌資源的方法
Step1.
先到專案建置輸出的資料夾(\bin\Debug)下,如果已經有App.config的話,請先刪除它。
Step2.
選取App.config,設定他的屬性:【建置動作】為內嵌資源。
當然【複製到輸出目錄】仍然選擇預設:不要複製。
Step3.
此時,我們無法使用System.Configuration.ConfigurationManager來讀值了。
而是改用System.Reflection.Assembly來把編譯為內嵌資源的App.config裡面的內容讀出來。/**************************************** * 將App.config設成內嵌資源 ****************************************/ System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); //取得內嵌資源 ...PS:參數是 專案名稱(namespace).檔案名稱 System.IO.Stream file = thisExe.GetManifestResourceStream("WinForm_Exp.App.config"); //讀取二進位檔.. String sXML = ""; using (System.IO.StreamReader sr = new System.IO.StreamReader(file, Encoding.Default)) { sXML = sr.ReadToEnd(); } MessageBox.Show(sXML);
PS.注意sXML是App.config裡面所有的內容,所以我們後續還要寫一段把XML parsing出來的程式碼,在此就不加累述~
今天遇到...如果內嵌資源的檔案不是放在根目錄。
回覆刪除Stream file = thisExe.GetManifestResourceStream("專案名稱.檔案名稱");
這邊的"專案名稱.檔案名稱"就必須加上資料夾的名稱。
例如: "專案名稱.XXX.YYY.檔案名稱"
否則就會讀不到檔案內容 ~_~