2013-02-19 63 views
0

我需要在配置文件中存儲一些設置(連接字符串,文件夾路徑)。我應該使用C#App.config來進行自定義應用程序設置嗎?

我應該使用App.config嗎?

看起來很明顯,但是......

1)包含一些.NET配置的東西(軟件包,versiosn等),我從不希望任何人能夠觸摸到 - 我寧願將它們編譯到程序中。

2)感覺怪怪的有我的開發模式配置設置編成程序,並調用時App.Config中丟失(默認爲內置的資源或東西)

3)我喜歡乾淨的配置文件所以我可以一目瞭然地知道設置是什麼(並且我有OCD)?

回答

0

是的,這是最好的做法,它可以防止人們重新編譯應用程序以進行基本的配置更改:例如,新用戶需要獲得自動發送的電子郵件,比重新編譯和重新部署應用程序更容易改變配置文件。關於你的配置文件問題,這裏有一個優雅的解決方案:http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

我更喜歡重命名文件,或保留註釋的字符串,這取決於我需要做多少工作才能從開發到生產。

+0

謝謝,但我從來不會建議將這些值硬編碼到程序 - 選擇是在App.Config和(說)我自己的自定義Settings.xml – 2013-02-19 23:09:59

+0

app.config是一個XML文件的傢伙。您的解決方案只是重新發明輪子,並且不會將app.config暴露給最終用戶,我唯一可能想到的方式是通過文件系統或某種緩衝區溢出來訪問它。即使如此,在某些情況下,你不能相信你的同伴,特別是你。在更大的組織,所以使用MS提供的工具配置混淆我相信:http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config -file.aspx。我也知道將加密值存儲在數據庫中。 – RandomUs1r 2013-02-19 23:34:09

+0

App.config實際上暴露給用戶,形式爲 .exe.config - 這就是它的全部要點,所以可以編輯設置。 – 2013-02-20 22:07:29

0

對於* .config文件,我的規則是當我希望在不重新部署二進制文件的情況下更改設置的能力時使用它們。如果我不在乎要求部署進行更改,那麼我會使用常量。如果我有疑問,我會使用配置文件。我差不多總是使用配置文件。

當我使用* .config的東西,我會公開這些值通過另一個「配置」類,有一個靜態只讀屬性爲我希望公開的每個值。也就是說,如果我的應用程序配置有一個設置

<add key="ServerLoadTime" value="-30" /> 

然後我的配置類可能看起來像:

public static class Configuration 
{ 

    /// <summary> 
    /// Get the number of minutes before prior to the event that the server is started. 
    /// </summary> 
    public static int ServerLoadTime 
    { 
     get 
     { 
      if (ConfigurationManager.AppSettings["ServerLoadTime"] != null) 
       return int.Parse(ConfigurationManager.AppSettings["ServerLoadTime"]); 

      Logging.Write("ServerLoadTime is missing from the Configuration file.", EventLogEntryType.Warning, Logging.Sources.General, "Configuration.ServerLoadTime", null); 
      return -30; // return a default value. 
     } 
    } 

}

這種方法創建一個標準化的封裝,可提供:

  • 一種快速引用值的方法,無需通過CM和檢查有效性。
  • 表面處理配置不當的值/缺失值。
  • 將來自配置文件的字符串轉換爲所需類型的地方。
  • 一個地方記錄缺失值,同時仍然提供默認的最後手段。
  • 需要時將邏輯附加到結果的地方。
+0

謝謝,但我永遠不會建議將這些值硬編碼到程序中 - 選擇是在App.Config和(比如)我自己的自定義Settings.xml之間選擇-Brendan – 2013-02-19 23:10:35

+0

您沒有提到XML文件作爲選項。無論哪種方式,如果我知道它們很少會改變(即const double Pi = 3.141592653;)(我知道你可以使用Math.Pi;這是一個例)。 – Heather 2013-02-19 23:31:12

1

是的,把它們全部放入app.config。我的推理是,最終用戶可編輯app.config真的,甚至只有最終用戶會知道的那些位(連接字符串和文件夾路徑)。你想讓一個不懂計算機的人用記事本編輯XML文件嗎?我知道我不知道。

獲取最終用戶值到app.config的唯一可靠方法是在安裝期間提示用戶,並將它們自己寫爲自定義操作。

+0

嗯,你慢慢贏了我.... – 2013-02-19 23:11:00

相關問題