2013-03-23 78 views
0

對於WPF和C#來說,我一般都很陌生,使用app.config會令我困惑。感覺完成非常基本的任務非常困難。我只是想添加一些數據驅動設置到我的應用程序,並想使用app.config。在app.config中使用自定義節在WPF中引發異常

經過一番研究,它看起來像「appSettings」是舊的,沒有類型檢查,並且「applicationSettings」似乎已被棄用(甚至在VS 2012的標準架構中也沒有)。所以,我現在正在嘗試創建一個自定義配置部分。我基於示例編寫了一個非常簡單的例子,但在啓動期間拋出了TypeInitializationException。我正在盯着代碼,但沒有看到有什麼問題。

app.config文件:

<configSections> 
    <section name="applicationConfig" type="MyApp.ApplicationConfig, MyApp"/> 
</configSections> 

<applicationConfig 
    UseLocalhost="true" 
    WebServer="http://www.someserver.com" 
    MachineId="999"/> 

C#代碼:

namespace MyApp 
{ 
    public class ApplicationConfig : ConfigurationSection 
    { 
     public ApplicationConfig() 
     { 
     } 

     public static ApplicationConfig GetConfig() 
     { 
      return (ApplicationConfig)System.Configuration.ConfigurationManager.GetSection("applicationConfig") ?? new ApplicationConfig(); 
     } 

     [ConfigurationProperty("UseLocalhost", DefaultValue = false, IsRequired = false)] 
     public bool UseLocalhost 
     { 
      get { return (bool)this["UseLocalhost"]; } 
      set { this["UseLocalhost"] = value; } 
     } 

     [ConfigurationProperty("WebServer", IsRequired = true)] 
     public string WebServer 
     { 
      get { return (string)this["WebServer"]; } 
      set { this["WebServer"] = value; } 
     } 

     [ConfigurationProperty("MachineId", DefaultValue = 999, IsRequired = false)] 
     public int MachineId 
     { 
      get { return (int)this["MachineId"]; } 
      set { this["MachineId"] = value; } 
     } 
    } 
} 

感謝您的幫助。

回答

0

它看起來像一些其他代碼引發異常 - 不是你引用的配置節類。 TypeInitializerException由靜態構造函數或靜態字段初始值設定項引發,您的代碼都沒有。你如何調用GetConfig()?底線是:在代碼中查看其他地方,你的部分類和配置文件XML似乎是確定的。

+0

感謝您的回答。我目前懷疑這是因爲xsd模式檢查。構建成功,但有一個警告,它不瞭解我的自定義屬性。我在VS中使用了「創建模式」工具,但這導致了另一個問題,它抱怨說「配置」被定義了兩次。可能曾經在一個默認模式中。此時,我正在使用「appSettings」和ConfigurationManager.AppSettings。這不是理想的,但現在工作。 – user2203032 2013-03-24 05:43:36

+0

不要這麼想......我把你的代碼和配置xml粘貼到我的項目中,它工作 - 沒有例外。它必須是別的東西,可能是你調用GetConfig()的部分,甚至是與你的代碼段無關的代碼。 – Volma 2013-03-25 03:19:53

0

我發現過去你不能在自己配置的同一個程序集中擁有自定義配置對象。嘗試將對象放入單獨的程序集中,在項目中引用該新程序集,更新.config文件中的自定義對象程序集,然後從那裏開始

+1

嗯......我把自定義配置對象與配置文件的所有時間放在同一個程序集中 - 從來都不是我的問題...... – Volma 2013-03-24 15:32:29

相關問題