0

私は一般的にWPFとC#に非常に慣れていないため、app.configを使用すると混乱します。かなり基本的なことを達成するのは、不必要に難しいと感じます。アプリにいくつかのデータ駆動型の設定を追加したいだけで、app.config を使用したいと考えていました。

少し調査したところ、「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; }
        }
    }
}

助けてくれてありがとう。

4

2 に答える 2

0

過去に、構成中の同じアセンブリにカスタム構成オブジェクトを含めることができないことがわかりました。オブジェクトを別のアセンブリに入れ、プロジェクトでその新しいアセンブリを参照し、.config ファイルでカスタム オブジェクトのアセンブリを更新して、そこから移動してみてください。

于 2013-03-24T13:08:21.627 に答える
0

引用した構成セクションクラスではなく、他のコードによって例外がスローされたようです。TypeInitializerException は、静的コンストラクターまたは静的フィールド初期化子によってスローされますが、どちらのコードにもありません。GetConfig() をどのように呼び出しますか? 肝心なのは、コードのどこかを見てください。セクション クラスと構成ファイルの XML は問題ないようです。

于 2013-03-24T01:21:57.643 に答える