2008-09-22 45 views
18
  • 您可以使用App.config;但它只支持鍵/值對。
  • 您可以使用.Net配置,配置部分;但它可能非常複雜。
  • 你可以自己使用Xml序列化/反序列化;你的課程 - 你的方式。
  • 你可以使用其他方法;他們可能是什麼? ...

你更喜歡哪些這些或其他方法(如果有的話)?爲什麼?你更喜歡.net中的哪種配置方法?爲什麼?

回答

21

當鍵值對都不夠我用配置部分,因爲它們不是複雜的使用(除非你需要一個複雜的部分):

定義您的自定義欄目:

 public class CustomSection : ConfigurationSection 
     { 
      [ConfigurationProperty("LastName", IsRequired = true, 
      DefaultValue = "TEST")] 
      public String LastName 
      { 
       get { return (String)base["LastName"]; } 
       set { base["LastName"] = value; } 
      } 

      [ConfigurationProperty("FirstName", IsRequired = true, DefaultValue = 
      "TEST")] 
      public String FirstName 
      { 
       get { return (String)base["FirstName"]; } 
       set { base["FirstName"] = value; } 
      } 

      public CustomSection() 
      { 

      } 
     } 

編程創建部分(如果它不存在):

  // Create a custom section. 
      static void CreateSection() 
      { 
       try 
       { 

        CustomSection customSection; 

        // Get the current configuration file. 
        System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(@"ConfigurationTest.exe"); 

        // Create the section entry 
        // in the <configSections> and the 
        // related target section in <configuration>. 
        if (config.Sections["CustomSection"] == null) 
        { 
         customSection = new CustomSection(); 
         config.Sections.Add("CustomSection", customSection); 
         customSection.SectionInformation.ForceSave = true; 
         config.Save(ConfigurationSaveMode.Full); 
        } 
       } 
       catch (ConfigurationErrorsException err) 
       { 
        //manage exception - give feedback or whatever 
       } 

      } 

繼CustomSection定義和實際CustomSection會爲你創建:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="CustomSection" type="ConfigurationTest.CustomSection, ConfigurationTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" /> 
    </configSections> 
    <CustomSection LastName="TEST" FirstName="TEST" /> 
</configuration> 

立即檢索您的部分屬性:

CustomSection section = (CustomSection)ConfigurationManager.GetSection("CustomSection"); 
    string lastName = section.LastName; 
    string firstName = section.FirstName; 
12

如果我能擺脫它,我將只使用App.Config,但是,如果我需要更復雜的東西,我將使用自定義配置部分。是的,開始時需要了解的很痛苦,但是對於我的觀點來說,統一的配置來源以及所有設置的熟悉配置都值得花時間進行投資。

+0

使用App.Config的另一個好處是它是框架支持的配置應用程序的方法。這給你諸如教程,API文檔,外部幫助等優點。 – 2008-09-22 23:34:10

0

我將大部分配置保存在IoC容器中,例如Spring.Net。

1

我使用自定義xml配置文件,其中每個環境(dev/qa/prod)使用不同的配置文件。配置文件是通過諸如服務的主機/端口配置等動態實例化的模板 - 這使得多環境和故障轉移非常容易,因爲它可以通過模板實例化代碼來處理。

當然,如果你有很少的配置,並不關心多個環境,那麼app.config是更標準的,可能是最好的方式。

1

我發現NameValueCollectionHandler是最簡單和最好的,我通常會通過configSource屬性鏈接到外部配置文件。

我嘗試將ABSOLUTE MINIMUM配置放置在配置文件中,其中大部分配置在具有自我感知其部署環境的應用程序(例如通過計算機名稱或IP地址(如果已知))的代碼中。當然,這需要對環境進行更多的預先規劃和知識,但在部署時要少得多。

2

我以前是網絡/系統管理員,現在我開發了數據庫應用程序的內部實用程序。我發現的是:

簡單的非嵌套配置文件對於那些不會改變他們訪問他們資源的應用程序來說是最好的。

任何更復雜的需求都需要通過管理界面進入數據庫。這隻適用於普通的商業用戶。如果您擔心數據庫被損壞,請使用複雜的配置文件方法。文件往往比數據庫損壞得更少。

現在,如果您的用戶是其他開發人員,那麼您將擁有更多靈活性來存儲配置。

0

如果你有.NET 3.0可用,我發現XamlReader/XamlWriter非常方便存儲設置。他們可以寫/讀任何。NET對象XAML如果:

  • 的對象有一個參數的構造函數
  • 屬性爲讀/寫有公共的getter和setter

這是特別好,你不必裝飾您的設置對象具有任何屬性。

0

dataset.WriteXML()/ dataset.ReadXML()工作得很好,我當的app.config不剪了。

4

將您的配置放入數據庫中。如果你在多臺機器上運行你的應用程序(例如客戶機 - 服務器應用程序),那麼所有的每臺機器配置系統都是PITA。單個配置區域是放置配置的最佳方式。寫一個gui來管理它,你會很開心。

將app.config文件展開到200個客戶端盒子..它不好玩,尤其是當一個人錯過了(他們確實相信我)。

0

主要是我喜歡使用自定義XML文件和XML序列化的方法來讀取和寫入這個配置文件...不僅限於鍵/值對,而不是複雜的實現......

0

我有好運氣滾動我自己的特殊類,它從與調用程序集相關聯的「.settings」文件返回配置數據。該文件是XML文件,設置類公開地將其公開爲XDocument。此外,此設置類的索引器還會從/ settings/setting節點返回元素值。

適用於簡單應用程序,您只需要一個鍵/值對設置訪問權限,適用於需要定義自己的結構並使用System.Xml.Linq查詢XML文檔的複雜設置。

滾動自己的另一個好處是您可以使用FileSystemWatcher和回調動作類型在文件在運行時更改時自動啓動方法。

1

我的鍵/值配置對於簡單的配置文件工作得非常好。當文件開始增長並且難以維護時,這成爲一個問題。我們開始將配置文件分割爲「通用」和「特定」應用程序配置。文件訪問對應用程序是透明的,在大多數情況下「常用」值相同,但對於每個已部署的應用程序,「特定」值不同。

1

我使用自定義的xml配置文件。每個設置都有一個鍵,值和類型。

它有一個主要部分包含所有設置和其他部分,其中包含特定環境(開發,分段,實時)的設置覆蓋。這部分我不需要在部署時替換部分文件。 我有一個小包裝,你可以打電話來獲得一個特定的設置或包含所有的字典。

我最近創建了一個T4 template,它將讀取配置文件並創建一個靜態強類型設置類。這是一個巨大的節省時間。

相關問題