簡體   English   中英

編輯/修改C#應用程序設置

[英]Editing/Modifying C# Application Settings

.NET配置設置功能沒有我想要的靈活。 如果我正確理解了應用程序設置 ,那么我何時可以更改/編輯設置就受到限制。 在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啟動模型,並決定更改幾個參數的值。 該更改需要在該用戶的所有將來會話中保持不變(即,在運行時編輯)。 隨后,該用戶想要與他的團隊共享修改后的配置文件(例如,通過版本控制存儲庫或電子郵件)。 這將允許用戶B更新她的默認參數值(以匹配用戶A的值),而不必在應用程序中手動更改它們(即,在會話之間編輯)。 所有這些國防部應該發生在設計時之后。 ]

* 我意識到我可以在隱藏的AppData文件夾中的app.exe.config文件中“從技術上”編輯用戶范圍的設置,但這是一個隱藏文件,並非所有用戶都具有查看它的足夠特權。 (但請參見上面的“潛在的解決方法”。)

您需要做的就是結合這兩種技術!

在會話開始時,請從配置文件中讀取已配置的設置,並將其存儲到可寫的全局靜態變量(或任何形式的持久性)中。

然后,當用戶決定更改此設置時,只需更改該設置的值即可。

public static Program {

    public static string ConnectionString { get; set; }

    void Main(string connectionString) {
         ConnectionString = connectionString;
    }

}

public class SomeOtherClass {
     public void SomeOtherMethod () {
         Program.ConnectionString = "new value";
     }
}

這只是如何使用它的一個非常簡單的例子。 請注意,與其將字符串作為參數傳遞給程序,您可能會選擇從應用程序設置中讀取默認值。 您可能還會將用戶配置的連接字符串存儲到某種數據庫中,以便每個用戶的數據庫可以不同。

如果您在案例研究中嘗試了以下操作,並且可以將其概括,該怎么辦?

  1. 只要用戶可以更改默認數據庫名稱,那么此密鑰應在用戶范圍而不是應用程序范圍內定義
  2. 安裝我假定為Windows應用程序的應用程序后,在第一次運行時,請檢查user.config是否具有數據庫名稱的值,如果是,則繼續加載該應用程序,否則,請移至步驟3。
  3. 向用戶顯示數據庫名稱為默認值的屏幕,用戶可以更改設置,並確保在此處進行一些驗證,完成設置頁面后,將其存儲在user.config文件中,以便下一步使用您的應用程序運行時,它將找到所需的設置才能正常運行。
  4. 對於管理員特權,您可以顯示一個按鈕以在運行時更改設置。

我將這種技術用於所有需要用戶定義的重要應用程序中,例如“存儲圖像的位置,數據庫名稱,連接字符串等”。

希望這會給您提示或其他

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM