1

これが正しいかどうかはわかりませんが、asp.NETWebプロジェクトのカスタム構成ファイルを作成しようとしています。私が見つけたものの半分はそれらのためだけなので、これはウィンドウフォームではないことを明確にしたいと思います。このファイルの読み取りと書き込みを行って、いくつかのアプリケーション設定を変更しようとしています。

このチュートリアルを使用して、この巨大なクラスを作成しました。簡略化したバージョンは次のとおりです。

namespace Tedski.Configuration {
    public class TedskiSection : ConfigurationSection {

        private static ConfigurationProperty s_propName;
        private static ConfigurationPropertyCollection s_properties;

        static TedskiSection() {
            s_propName = new ConfigurationProperty(
                "name", 
                typeof(string), 
                null, 
                ConfigurationPropertyOptions.IsRequired
            );
            s_properties = new ConfigurationPropertyCollection();
            s_properties.Add(s_propName);
        }

        protected override ConfigurationPropertyCollection Properties {
            get { return s_properties; }
        }

        [ConfigurationProperty("name")]
        public string Name {
            get {
                return (string)base[s_propName];
            }
            set {
                base[s_propName] = value;
            }
        }
    }
} 

構成をどこで定義すればよいかわかりません。これを次のようにWeb.configファイルに入れることができます。

<configuration>
    <configSections>
        <section name="Tedski" type="Tedski.Configuration.TedskiSection" />
    </configSections>
    <Tedski name="Ted" />
</configuration>

そして、これですべてがうまくロードされます:

TedskiSection section = ConfigurationManager.GetSection("Tedski") as TedskiSection;
Console.WriteLine(section.Name); //produces "Ted"

ただし、をConfiguration呼び出すことができるようにするには、これをオブジェクトでロードできる必要がありますConfiguration.Save()。その特定のセクションをロードしてWeb.configを保存できないようです(これは危険だと私は理解しています)。私が試している別の解決策は、上記で定義したものと同じXML構文を使用して別の.configファイル(Tedski.config)を作成することです。

この回答を使用してTedski.configをロードしようとしましたが、エラーが発生します。

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = Server.MapPath("~/Tedski.config");
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigUserLevel.None);
TedskiSection section = config.GetSection("Tedski") as TedskiSection; //fails

ConfigurationErrorsException "Tedskiの構成セクションハンドラーの作成中にエラーが発生しました:アセンブリ'System.Configuration、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'からタイプ'Tedski.Configuration.TedskiSection'を読み込めませんでした

これをロードすると、変更section.Nameして呼び出すことができますconfig.Save()が、ここでスタックします。

4

1 に答える 1

1

プロパティでは、typeどのアセンブリにが含まれているのかを指定する必要がありますTedski.Configuration.TedskiSection。例えば:

<section name="Tedski" type="Tedski.Configuration.TedskiSection, TedskiAssemblyName" />

そこでの「TedskiAssemblyName」を、クラスを含むアセンブリの名前に置き換えます。

于 2013-02-26T22:44:27.863 に答える