我不确定我是否正确,但我正在尝试为 asp.NET Web项目编写自定义配置文件。我想明确表示这不是 Windows 窗体,因为我找到的一半东西只适用于那些。我正在尝试读取和写入此文件以更改几个应用程序设置。
我使用本教程编写了这个庞大的类。这是一个简化版本:
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(据我所知这是危险的)。我正在尝试的另一个解决方案是创建一个单独的 .config 文件 (Tedski.config),其 XML 语法与上面定义的相同。
我尝试使用此答案加载 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,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”加载类型“Tedski.Configuration.TedskiSection”
如果我得到这个加载,我可以修改section.Name
并调用config.Save()
,但我被困在这里。