2009-11-20 53 views
14

我運行.NET 3.5的C#新手,我想存儲一堆的App.config應用程序的默認值,因爲這些設置可以由服務器環境而異(如開發,分期,生產)。我想要做的與this StackOverflow article中描述的類似,但我也希望能夠使用非字符串值(例如int,bool)。像這樣的東西(名稱值只是一個例子,順便說一句):使用App.config中設置強類型的變量

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <applicationSettings> 
     <MyApp> 
      <setting name="InitText" serializeAs="String"> 
       <value>Hello</value> 
      </setting> 
      <setting name="StartAt" serializeAs="Integer"> 
       <value>5</value> 
      </setting> 
      <setting name="IsWeekend" serializeAs="Boolean"> 
       <value>True</value> 
      </setting> 
     </MyApp> 
    </applicationSettings> 
</configuration> 

可能有人提供瞭如何做到這一點的例子,以及如何檢索通過C#中的值?我見過很多需要使用的示例,但我不確定是否需要這些元素,如果有,請如何創建它們。

回答

28

怎麼樣使用.NET Framework的Application Settings architecture。您可以強制鍵入對默認值的訪問權限。

在Windows應用程序項目上,Settings文件是在Resources文件夾中自動創建的。然後,您可以添加在App.config文件中保存的應用程序設置,就像您在問題中顯示的一樣。

例如:

int i = Settings.Default.IntSetting; 

bool b = Settings.Default.BoolSetting; 

編輯: 如果您的項目不包含的設置文件,你可以隨時加入新的項目,然後選擇一個設置文件添加一個。 (右鍵單擊項目文件,然後執行:添加 - >新建項目 - >設置文件)。在我的情況下,我將其命名爲「設置」,但您可以隨便命名。

添加文件Visual Studio將打開設置設計師,您可以添加您的強類型設置後。從你說的話你應該設置在應用程序範圍而不是在用戶。然後建立這個項目,你應該可以訪問帶有文件名稱的類。

+0

我認爲這是我需要的,但我無法通過C#訪問變量。當我輸入「設置」。 Intellisense沒有看到任何東西...... – 2009-11-20 18:35:51

+1

它並沒有真正融入到框架中,而是一個IDE的東西。當您向您的C#/ VB項目中添加一個'.settings'文件時,它將用於生成類'Settings'的代碼,該代碼將配置設置作爲相應類型的屬性進行封裝,並執行所有必要的強制類型轉換等。 – 2009-11-20 20:59:40

+0

Thank you for the澄清 - 我很感激。 – 2009-11-26 04:20:04

11
Boolean isWeekend = Convert.ToBoolean(ConfigurationManager.AppSettings["IsWeekend"]) 
+6

或者Boolean.TryParse(...)。 http://msdn.microsoft.com/en-us/library/system.boolean.tryparse.aspx – 2009-11-20 17:54:41

+8

這不會失敗的要求「強類型變量」部分,你仍然存儲在應用程序中的字符串.config – 2009-11-20 18:13:03

+0

是的,我不想重寫一個字符串作爲正確的類型。 – 2009-11-20 18:24:10

-1

聽起來像是你想有一個自定義<configSection>。基本上,它的工作原理是這樣的:

- 創建具有正確的默認值,等等,所以它會自動加載基於你的web.config設置來設置一個很好的繼承結構的配置類。 - 添加你的配置節在web.config,指定「類型」,將加載您的設置,以便在.NET框架將知道如何初始化

您可以找到MSDN library關於它的各種信息的。這些示例是asp.net,但它們也可以在應用程序配置中正常工作。

+0

你不需要爲此寫一個自定義的configSection。 – BrainSlugs83 2013-09-12 06:31:22