1

我不确定我是否正确,但我正在尝试为 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(),但我被困在这里。

4

1 回答 1

1

在您的type财产中,您必须告诉它哪个程序集包含您的Tedski.Configuration.TedskiSection. 例如:

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

将“TedskiAssemblyName”替换为包含该类的程序集的名称。

于 2013-02-26T22:44:27.863 回答