我不确定我是否正确,但我正在尝试为asp.NET web 项目编写自定义配置文件。我想说清楚这不是一个Windows窗体,因为我发现的一半东西只适用于那些。我正在尝试读取和写入此文件以更改几个应用程序设置。
我使用this教程编写了这个庞大的类。这是一个简化版本:
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)。
我尝试使用this answer来加载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的配置节处理程序:无法加载类型 汇编中的'Tedski.Configuration.TedskiSection' 'System.Configuration,Version = 4.0.0.0,Culture = neutral, 公钥= b03f5f7f11d50a3a'
如果我要加载,我可以修改section.Name
并致电config.Save()
,但我被困在这里。
答案 0 :(得分:1)
在type
属性中,您必须告诉它哪个程序集包含您的Tedski.Configuration.TedskiSection
。例如:
<section name="Tedski" type="Tedski.Configuration.TedskiSection, TedskiAssemblyName" />
将“TedskiAssemblyName”替换为包含该类的程序集的名称。