2010-07-09 40 views
3

我想存儲C#應用程序的設置,這樣默認的設置可以很容易地與我的二進制文件一起提供,最終用戶可以使用簡單的文本編輯器(或以其他一些簡單的方式)更改它們。
我似乎面臨幾個選擇:.config文件,.settings文件或.resx文件。這些有什麼優點和缺點?如何存儲可部署c#應用程序的設置?

編輯1:最終用戶主要是計算機專業人員,因此編輯這些文件應該不是什麼大問題。

編輯2:設置類似於連接字符串和其他一些參數(大部分是一次性的東西)。建立一些GUI/API來改變它們並不是真正的選擇。此外,我的應用程序不會編輯這些值中的任何一個,因此不需要通過代碼實現持久性。

回答

4

是的,項目+屬性,設置選項卡旨在執行此操作。在此處添加您的設置,將範圍更改爲應用程序。這會在您的構建方向中生成一個app.exe.config文件,並將其與您的EXE一起部署。使用Properties.Settings.Default。 設置名稱在您的代碼中獲取設置值。您的用戶通常需要管理員權限才能編輯目標機器上的.exe.config文件以更改設置值。

小字體:設置對於DLL程序集不適用,您必須手工合併.config文件。使用調試器時,將從app.vshost.exe.config文件中檢索設置。

.settings文件是IDE使用的幫助文件,忽略它。 .Resx文件存儲資源,它們被編譯並以二進制形式嵌入程序集中。它們不能被用戶編輯。

0

如果最終用戶真的要編輯他們,我不確定我會希望他們編輯我的app.config文件。

你有另外幾個替代品,你沒有包括在內。你可以使用一個老派的.INI文件,這對最終用戶來說是很簡單的。你也可以使用註冊表。我會推薦INI文件,除非你的用戶非常精明,在這種情況下使用.config文件。

1

我認爲你可以有兩種方法來做到這一點。

  • 對於普通用戶,您可以製作一個自定義的圖形用戶界面,以方便他們使用。
  • 對於高級用戶,如果存儲在文本文件(ini文件,配置文件等)中,或者您可以創建API,則可以使用文本編輯器編輯配置。
1

.settings文件通常用於特定用戶的偏好和配置信息(而的.config文件用於該修改的.Net應用程序運行時或任何全局設置。乾脆把.config文件中的參數可以改變應用程序的行爲,即使沒有爲它編寫單行代碼也是如此)。

退房MSDN上的設置文章更多:http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

+0

你能解釋.config文件如何改變我的應用程序的行爲嗎? – apoorv020 2010-07-09 13:36:47

+0

有幾種方法,並且大多數.Net組件都有自己的部分,它們依賴於_.config_文件,但是我可以從頭頂開始思考一些示例:對於WCF,可以修改連接超時,安全性和加密級別等等,就在_.config_文件中。您還可以用本地DLL替換GAC DLL,或者在_.config_文件中指定將覆蓋運行時將加載的版本和位特性。 – rakuo15 2010-07-09 13:54:06

+0

Hans說您可能需要在計算機上進行管理員訪問才能更改.ex.config文件,這正是我需要的,應該照顧大多數惡意用戶。但值得一提的是,它可能是一個非常危險的工具提供給普通用戶。 – apoorv020 2010-07-09 14:02:54

0

的答案取決於部署方法。例如,如果您使用ClickOnce並提供更新,則可能會使用Application Settings來解決問題。

我相信最好的方法是創建一個GUI,這當然是適合新手用戶的。鑑於您已經排除了該選項,請使用John的建議(ini文件)。

1

由於該文件將被用戶修改,我認爲使用app.config不是一個好主意。如果他們打破文件結構呢?或者設置一個無效值?應用程序可能會直接崩潰。

其中一個解決方案是使用定製XML文件。您將在應用程序啓動時驗證它。 XSD可能是更優雅的方法,但您也可以直接解析它並在代碼中進行驗證。如果文件無效而不是崩潰,則會嘗試解決問題,如果不可能,則向用戶顯示相當的錯誤,並解釋在第處的XML中存在錯誤,位置n,其中是[error description here]