0

Web.Configファイルにカスタムセクションがあり、configSourceを介して別の.configファイルを参照しています。スキーマにXSDを使用して.csファイルを生成しました。生成したクラスを使用して構成を逆シリアル化する方法。.GetSection()メソッドを使用してconfigsectionを読み込もうとすると、クラスがConfigurationSectionから実装する必要があるというエラーが表示されます。xsdを使用してクラスを生成したため、それらはConfigurationSectionまたはConfigurationElementから継承されませんでした。前もって感謝します!!

4

1 に答える 1

0

ConfigurationSection からクラスを実装してファイル名を取得し、XMLSerializer を使用して、XSD ツールによって生成されたクラスを使用して Deserialize しました。ここにサンプルがあります:

namespace mycontrol
{
      public class ConfigurationSection : System.Configuration.ConfigurationSection
        {
           //Configuration is the type generated by XSD for my schema element Configuration

            private static Configuration _config; 

            /// <summary>
            /// static method to load config section and deserialize config
            /// </summary>
            /// <returns></returns>
            private static Configuration GetConfig()
            {
                if (_config == null)
                {
                    ConfigurationSection configSection = (ConfigurationSection)ConfigurationManager.GetSection("SearchControlsConfig") as ConfigurationSection;
                    if (!string.IsNullOrEmpty(configSection.ExternalConfigSource))
                    {
                        string strFilePath = configSection.ExternalConfigSource;
                        if (!File.Exists(strFilePath))
                        {
                            strFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strFilePath);
                            if (!File.Exists(strFilePath))
                                return null;
                        }

                        using (FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read))
                        {
                            XmlSerializer config = new XmlSerializer(typeof(Configuration));
                            _config = (Configuration)config.Deserialize(fs);
                        }
                    }

                }

                return _config;
            }


            /// <summary>
            /// Attribute to specify config source file in custom config section
            /// </summary>
            [ConfigurationProperty("externalConfigSource", DefaultValue = "", IsRequired = false)]
            public string ExternalConfigSource
            {
                get
                {
                    return this["externalConfigSource"] as string;
                }
            }
        }
}

ConfigurationManager によって予約されているため、カスタム構成を指定するときに configSource 属性をプロパティとして使用できません。

于 2011-06-23T06:42:15.640 に答える