1

I'm not sure I am going about this right, but I am trying to write a custom configuration file for an asp.NET web project. I want to make it clear this is not a windows form, because half the stuff I find is only for those. I am trying to read and write to this file to change a couple of application settings.

I wrote this huge class using this tutorial. Here's a simplified version:

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;
            }
        }
    }
} 

I am now not sure where to define my configuration. I can put this in my Web.config file like this:

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

and everything loads up fine with this:

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

However, I need to be able to load this up with the Configuration object, in order to be able to call Configuration.Save(). I can't seem to load up that specific section and save the Web.config (from what I understand this is dangerous). Another solution I'm trying out is creating a separate .config file (Tedski.config) with the same XML syntax as defined above.

I tried using this answer to load up Tedski.config, but I get an error:

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 "An error occurred creating the configuration section handler for Tedski: Could not load type 'Tedski.Configuration.TedskiSection' from assembly 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

If I got this to load, I could then modify section.Name and call config.Save(), but I'm stuck here.

1 Answer 1

1

In your type property, you have to tell it which assembly contains your Tedski.Configuration.TedskiSection. For example:

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

Replace "TedskiAssemblyName" there with the name of the assembly that contains the class.

Sign up to request clarification or add additional context in comments.

1 Comment

That was it... I just figured it out and checked back here. Thanks so much!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.