これが正しいかどうかはわかりませんが、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()
が、ここでスタックします。