.NET配置設置功能不像我想的那樣靈活。 如果我正確理解Application Settings,那麼我可以在何時更改/編輯設置。在C#中,應用程序設置分爲兩種不同的類型或範圍(「應用程序」和「用戶」),但兩者在如何更改或修改方面都存在限制。下表說明了differnce:編輯/修改C#應用程序設置
SCOPE: | EDIT AT DESIGN-TIME: | EDIT AT RUN-TIME: | EDIT BETWEEN SESSIONS: --------------------------------------------------------------------------------------- User | Setings.settings | Settings.Default.Save() | *Not supported* Application | Setings.settings | *Not supported* | edit app.exe.config
有沒有「內置」的設置功能,讓我所有三種機制來編輯設置?使用配置文件的主要動機之一是允許用戶在不重新構建源代碼的情況下更改默認值(如使用應用程序範圍的設置可以完成的那樣)。但是,用戶不應該使用強制來編輯.config文件;他們還應該能夠在運行時進行更改,並在設置中保持不變(如可以使用用戶範圍的設置)。當然,必須有某種機制提供兩種功能。
底線:爲什麼在運行時不能編輯應用程序設置(app.exe.config
)?這將解決我所有的問題。 據我所知,這可能會導致共享同一臺計算機的用戶出現問題。但誰又這樣做?
潛在解決方法:反正是有改變用戶設置配置文件默認存儲位置爲非隱藏文件夾?
(澄清)更新: 我想說的是,我希望能夠在設計時更改默認設置,在運行時,或中間會話(即通過編輯配置文件)。但是,當使用由Settings.settings
提供的內置C#持久性機制時,我必須在3中選擇至多2個。我是否錯過了某些東西?還有另外一個我不知道的選擇嗎?
[使用案例:我想存儲一個「默認」數據庫名稱連接字符串,但我希望用戶能夠在運行時(可以指定不同的數據庫,從而成爲「新」該用戶的默認值)。但我也希望能夠通過寫在配置文件中的默認,而無需重新運行或重新構建,應用]
[更好的使用案例:(迴應評論)
我有一個計算模型,其中包含模型中參數的默認值的配置文件。用戶A啓動模型並決定改變幾個參數的值。該更改需要持續對於所有未來會話對於該用戶(即,在RTunTime編輯)。隨後,該用戶想要與他的團隊共享修改後的配置文件(例如通過版本控制存儲庫或電子郵件)。這將允許用戶B更新她的默認參數值(以匹配用戶A)而不必在應用(即,在會話之間編輯)中手動改變它們。所有這些mod都應該在設計時發生。]
* 我知道我可以在位於AppData的隱藏文件夾中的文件app.exe.config「技術上」編輯用戶範圍設置,但是這是一個隱藏的文件,而不是所有用戶都可以有足夠的權限查看它。 (但請參閱上面的「潛在解決方法」。)
由於我缺乏知識,我沒有克服這種情況。但使用app.config可以在名稱值對中定義您的設置,並可以在運行時相應地選擇名稱。 –
在瞭解C#之後,我首先了解到的第一件事就是序列化。雖然字典很好,但它們並不適合包含複雜的數據,每次訪問數據時都需要進行轉換,容易產生錯誤(特別是由於用戶編輯)......使用「XmlSerializer」進行序列化/反序列化非常簡單,那麼爲什麼還要麻煩與'設置'在所有?我發現json是保存設置的最佳格式。 – Sinatr
如果沒有管理員提升,用戶應該無法更新適用於所有用戶的設置,因爲一個用戶可能會進行不利的更改,這會影響其他用戶。因此,更改應用程序設置更加困難...... – Phil1970