System.Configuration with a separate .config file

I took the code from this example.

http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

What is interesting to me (and I'm watching all over the Internet today) ... How can you do this in an external (separate) file.

The idea I'm going to do is:

<configuration> <configSections> <sectionGroup name="pageAppearanceGroup"> <section name="pageAppearance" type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly" allowLocation="true" allowDefinition="Everywhere" /> </sectionGroup> </configSections> <pageAppearanceGroup fileName="SomeSeparateFile.config"/> </configuration> 

..................

The above does not work (of course).

Below is my copy / paste of the ms article mentioned above. And it was fully functional when I inserted it here.

 //START HelperAssembly.csproj namespace HelperAssembly.Configuration { using System; using System.Collections; using System.Text; using System.Configuration; using System.Xml; public class PageAppearanceSection : ConfigurationSection { // Create a "remoteOnly" attribute. [ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)] public Boolean RemoteOnly { get { return (Boolean)this["remoteOnly"]; } set { this["remoteOnly"] = value; } } // Create a "font" element. [ConfigurationProperty("font")] public FontElement Font { get { return (FontElement)this["font"]; } set { this["font"] = value; } } // Create a "color element." [ConfigurationProperty("color")] public ColorElement Color { get { return (ColorElement)this["color"]; } set { this["color"] = value; } } } // Define the "font" element // with "name" and "size" attributes. public class FontElement : ConfigurationElement { [ConfigurationProperty("name", DefaultValue = "Arial", IsRequired = true)] [StringValidator(InvalidCharacters = " ~!@ #$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)] public String Name { get { return (String)this["name"]; } set { this["name"] = value; } } [ConfigurationProperty("size", DefaultValue = "12", IsRequired = false)] [IntegerValidator(ExcludeRange = false, MaxValue = 24, MinValue = 6)] public int Size { get { return (int)this["size"]; } set { this["size"] = value; } } } // Define the "color" element // with "background" and "foreground" attributes. public class ColorElement : ConfigurationElement { [ConfigurationProperty("background", DefaultValue = "FFFFFF", IsRequired = true)] [StringValidator(InvalidCharacters = " ~!@ #$%^&*()[]{}/;'\"|\\GHIJKLMNOPQRSTUVWXYZ", MinLength = 6, MaxLength = 6)] public String Background { get { return (String)this["background"]; } set { this["background"] = value; } } [ConfigurationProperty("foreground", DefaultValue = "000000", IsRequired = true)] [StringValidator(InvalidCharacters = " ~!@ #$%^&*()[]{}/;'\"|\\GHIJKLMNOPQRSTUVWXYZ", MinLength = 6, MaxLength = 6)] public String Foreground { get { return (String)this["foreground"]; } set { this["foreground"] = value; } } } } namespace HelperAssembly.Configuration { using System; using System.Configuration; public static class ConfigurationRetriever { public static PageAppearanceSection RetrievePageAppearanceSection1() { PageAppearanceSection config = (PageAppearanceSection)System.Configuration.ConfigurationManager.GetSection("pageAppearanceGroup/pageAppearance"); return config; } } } //START ConsoleApplication1.csproj using System; using HelperAssembly.Configuration; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try { PageAppearanceSection pas = ConfigurationRetriever.RetrievePageAppearanceSection1(); if (null != pas) { Console.WriteLine(pas.Color.Foreground); Console.WriteLine(pas.Color.Background); } } catch (Exception ex) { Exception innerException = ex; while (null != innerException) { Console.WriteLine(innerException.Message); Console.WriteLine("\n\r"); Console.WriteLine(innerException.StackTrace); Console.WriteLine("\n\r"); innerException = innerException.InnerException; } } Console.WriteLine("Press Enter"); Console.ReadLine(); } } } //XML for config file that works with the above code <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="pageAppearanceGroup"> <section name="pageAppearance" type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly" allowLocation="true" allowDefinition="Everywhere" /> </sectionGroup> </configSections> <pageAppearanceGroup> <pageAppearance remoteOnly="true"> <font name="TimesNewRoman" size="18"/> <color background="DEFDEF" foreground="ABCABC"/> </pageAppearance> </pageAppearanceGroup> </configuration> 
+4
source share
2 answers

This will work if you change your app.config to use this:

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="pageAppearanceGroup"> <section name="pageAppearance" type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly" allowLocation="true" allowDefinition="Everywhere" /> </sectionGroup> </configSections> <pageAppearanceGroup> <pageAppearance configSource="SomeSeparateFile.config"/> </pageAppearanceGroup> </configuration> 

And your someSeparateFile.config looks like this:

 <pageAppearance remoteOnly="true"> <font name="TimesNewRoman" size="18"/> <color background="123456" foreground="ABCDEF"/> </pageAppearance> 

(no configuration in this file!)

I managed to move configSections to separate files. Not sure if you can do this with configGroups unless you do a lot more programming. A wireframe configuration model makes it easy to move configSections.

Hope this helps!

+9
source

All Articles