c#程式應用程式設定檔案Settings.settings詳解
應用程式設定
應用程式設定使您能夠動態儲存和檢索應用程式的屬性設定和其他資訊。 還使您能夠維護客戶端計算機上的自定義應用程式和使用者首選項。 通常這些資料(如連線字串)對於執行應用程式是非常重要的,並且您不想將這些資料直接包含在應用程式程式碼中。 也許想要儲存兩種不同的資料庫連線字串,並在執行時基於計算機的位置檢索其中一個。 或者,想要儲存使用者的顏色首選項,然後在下一次執行應用程式時檢索它們。
請注意,應用程式設定是 Visual Studio 的一項功能,該功能替換了早期版本中的動態屬性功能(有關動態屬性的資訊,請參見使用動態屬性配置應用程式)。
每個應用程式設定必須具有唯一的名稱。 該名稱可以是字母、數字或下劃線的任意組合,但名稱不能以數字開頭且不能包含空格。 可通過 Name 屬性來更改名稱。
應用程式設定可以儲存為可 XML 序列化或包含實現 ToString/FromString 的 TypeConverter 的任何資料型別。 最常見的型別有 String、Integer 和 Boolean,但也可以將值儲存為 Color、Object 或連線字串。
應用程式設定還包含值。 這些值通過**“值”**屬性來設定,而且必須與設定的資料型別匹配。
此外,在設計時可將應用程式設定繫結到窗體或控制元件的屬性。 有關更多資訊,請參見 如何:新增或移除應用程式設定。
有兩類基於範圍的應用程式設定:
-
應用程式範圍的設定可以用於諸如 Web 服務的 URL 或資料庫連線字串這類的資訊。 這些值是與應用程式關聯的。 因此,使用者無法在執行時更改這些值。
-
使用者範圍的設定可以用於諸如保持窗體的最後位置或字型首選項這類的資訊。 使用者可以在執行時更改這些值。
可以使用**“範圍”**屬性更改設定型別。
專案系統將應用程式設定儲存在兩個 XML 檔案中:一個是 app.config 檔案,它是建立第一個應用程式設定時在設計時建立的;另一個是 user.config 檔案,它是當執行應用程式的使用者更改任何使用者設定的值時在執行時建立的。 請注意,使用者設定中的更改不會寫到磁碟,除非應用程式專門呼叫某一方法這樣做。
在設計時建立應用程式設定
在設計時,可用兩種方法來建立應用程式設定:通過使用**“專案設計器”的“設定”頁,或通過使用窗體或控制元件的
當您建立應用程式範圍的設定(例如,資料庫連線字串或對伺服器資源的引用)時,Visual Studio 將它與 <applicationSettings> 標記一起儲存在 app.config 檔案中。 (連線字串儲存在 <connectionStrings> 標記下。)
當您建立使用者範圍的設定(例如,預設字型、主頁或視窗大小)時,Visual Studio 將它與 <userSettings> 標記一起儲存在 app.config 中。
安全說明 |
---|
當您將連線字串儲存在 app.config 中時,應該採取預防措施以避免洩露連線字串中的敏感資訊(如密碼或伺服器路徑)。 如果從外部源獲取連線字串資訊(如使用者提供使用者 ID 和密碼),則必須小心以確保用於構造連線字串的值不會包含可以更改連線行為的附加連線字串引數。 可考慮使用“受保護的配置”功能以加密配置檔案中的敏感資訊。 有關更多資訊,請參見保護連線資訊 (ADO.NET)。 |
提示
由於沒有類庫的配置檔案模型,應用程式設定不適用於類庫專案。 Visual Studio Tools for Office DLL 專案是一個例外,它可以有一個配置檔案。
使用自定義的設定檔案
可以將自定義的設定檔案新增到專案中,以方便進行設定組的管理。 單個檔案中包含的設定會作為一個單元進行載入和儲存。 因此,如果能夠將常用組和不常用組的設定分開儲存在單獨的檔案中,則可以節省載入和儲存設定的時間。
例如,可以將諸如 SpecialSettings.settings 的檔案新增到專案中。 雖然 SpecialSettings 類未在 My 名稱空間中公開,但可以使用**“檢視程式碼”**讀取包含 Partial Class SpecialSettings 的自定義設定檔案。
“設定設計器”首先搜尋專案系統建立的 Settings.settings 檔案;此檔案是“專案設計器”在**“設定”**選項卡中顯示的預設檔案。 Settings.settings 位於 Visual Basic 專案的 My Project 資料夾和 Visual C# 專案的 Properties 資料夾中。 然後,“專案設計器”在專案的根資料夾中搜索其他設定檔案。 因此,您應當將自定義的設定檔案放在此根資料夾中。 如果將 .settings 檔案新增到專案中的其他地方,則“專案設計器”將無法找到此檔案。
在執行時訪問或更改 Visual Basic 應用程式的設定
在 Visual Basic 專案中,您可以使用 My.Settings 物件在執行時訪問應用程式設定。 在**“設定”頁上,單擊“檢視程式碼”**按鈕以檢視 Settings.vb 檔案。 (有關更多資訊,請參見如何:訪問設定事件。)Settings.vb 定義 Settings 類,此類使您能夠處理設定類上的以下事件:SettingChanging、PropertyChanged、SettingsLoaded 和 SettingsSaving。 請注意,Settings.vb 中的 Settings 類是分部類,其中僅顯示使用者所有的程式碼,而不顯示整個生成的類。 有關使用 My.Settings 物件訪問應用程式設定的更多資訊,請參見訪問應用程式的設定 (Visual Basic)。
在執行時使用者更改的任何使用者範圍的設定的值(例如窗體的位置)都儲存在 user.config 檔案中。 請注意,預設值仍儲存在 app.config 中。
如果在執行期間(例如在測試應用程式過程中)已更改任何使用者範圍的設定,並要將這些設定重置為其預設值,請單擊**“同步”**按鈕。 有關此控制元件的資訊,請參見“專案設計器” ->“設定”頁。
強烈建議使用 My.Settings 物件和預設 .settings 檔案來訪問設定。 原因是可以使用“設定設計器”為設定分配屬性,此外,還將在應用程式關閉之前自動儲存使用者設定。 但是,Visual Basic 應用程式可以直接訪問設定。 在這種情況下,您必須訪問 MySettings 類並使用專案根目錄中的自定義 .settings 檔案。 與處理 C# 應用程式時一樣,在結束應用程式之前還必須儲存使用者設定;下一節會對此進行說明。
在執行時訪問或更改 Visual C# 應用程式的設定
在 Visual Basic 以外的語言(如 Visual C#)中,必須直接訪問 Settings 類,如下面的 Visual C# 示例中所示。
C#
Properties.Settings.Default.FirstUserSetting = "abc";
還必須顯式呼叫此包裝類的 Save 方法,才能持久地儲存使用者設定。 此操作通常在主窗體的 Closing 事件處理程式中完成。 下面的 Visual C# 示例演示對 Save 方法的呼叫。
C#
Properties.Settings.Default.Save();
有關如何建立新應用程式設定並將它們繫結到窗體屬性的具體示例,請參見如何:使用設計器建立應用程式設定。 有關通過 Settings 類訪問應用程式設定的更多常規資訊,請參見應用程式設定概述。
如何:新增或移除應用程式設定
通過應用程式設定可以動態儲存和檢索應用程式的屬性設定和其他資訊。 有兩種基於範圍的應用程式設定型別:使用者範圍的設定和應用程式範圍的設定。
在設計時,您可以使用**“專案設計器”的“設定”窗格(僅限於 Visual Basic 和 Visual C#)或使用窗體或控制元件的“屬性”**視窗(允許您直接將設定繫結到屬性),新增應用程式設定。
在“專案設計器”中新增應用程式設定
-
在**“解決方案資源管理器”中選擇一個專案;在“專案”選單上,單擊“屬性”**。
-
選擇**“設定”**窗格。
-
單擊**“設定”**網格中的空白行。
-
在**“名稱”**列中輸入設定的名稱。 名稱不能包含空格。
-
從**“型別”**下拉列表中選擇設定的資料型別。
-
從**“範圍”下拉列表中選擇設定的作用範圍。 設定的作用範圍可以是“應用程式”,也可以是“使用者”**。
-
在**“值”**列中輸入設定的預設值。 該值必須與所選的資料型別匹配。
在“屬性”視窗中新增應用程式設定
-
在窗體設計器中選擇一個窗體或控制元件;在**“檢視”選單上,單擊“屬性視窗”**。
-
在**“屬性”視窗中,展開“(應用程式設定)”屬性(位於“資料”**節點下方)。
-
選擇**“(屬性繫結)”屬性,然後單擊省略號按鈕(“...”),開啟“應用程式設定”**對話方塊。
-
在**“應用程式設定”**對話方塊中,選擇要新增應用程式設定的屬性。
-
在屬性的下拉列表中,單擊**“(新建...)”以開啟“新建應用程式設定”**對話方塊。
-
在**“新建應用程式設定”對話方塊中,選擇“名稱”**屬性,輸入設定的名稱。 名稱不能包含空格。
-
選擇 DefaultValue 屬性,輸入設定的預設值。
-
從**“範圍”下拉列表中選擇設定的作用範圍。 設定的作用範圍可以是“應用程式”,也可以是“使用者”**。
-
若要將新設定繫結到屬性,請從下拉列表中選擇該設定,再單擊**“確定”**。
該屬性繫結將新增到**“屬性”視窗中,並且新的設定將新增到“專案設計器”中。 注意,一旦建立了設定,就必須使用“專案設計器”**對它進行更改。
移除應用程式設定
-
在**“解決方案資源管理器”中選擇一個專案;在“專案”選單上,單擊“屬性”**。
-
選擇**“設定”**窗格。
-
單擊**“設定”**網格中希望移除的設定所對應的行。
-
按**“刪除”鍵,或右擊並選擇“移除設定”**。
該設定將從**“專案設計器”**中移除。
提示
您需要手動從 app.config 中移除設定,因為“專案設計器”不會在您的程式碼中或在其自己的程式碼中移除對應用程式設定的任何引用。
如何:訪問設定事件
使用設定事件可以編寫用於響應對應用程式範圍設定或使用者範圍設定的更改的程式碼。 設定事件包括:
-
SettingChanging 事件在設定值更改前引發。
-
PropertyChanged 事件在設定值更改後引發。
-
SettingsLoaded 事件在設定值載入後引發。
-
SettingsSaving 事件在設定值儲存前引發。
有關如何使用這些事件程式設計的資訊,請參見 訪問應用程式的設定 (Visual Basic)。
設定事件可以從**“專案設計器”的“設定”**窗格中進行訪問。
訪問設定事件
-
在**“解決方案資源管理器”中選擇一個專案,然後在“專案”選單上單擊“屬性”**。
-
選擇**“設定”**窗格。
-
單擊**“檢視程式碼”**按鈕,在程式碼編輯器中開啟 Settings.vb 或 Settings.cs 檔案。 此檔案定義一些方法,用於處理在更改、載入或儲存使用者設定時引發的事件。