private void CreateSampleConfigFile(out string newConfigFilePath)
        {
            newConfigFilePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".config");
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap {
                ExeConfigFilename = newConfigFilePath
            };
            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

            // Create configuration
            ConfigurationSectionGroup sectionGroup = new ConfigurationSectionGroup();
            //"SampleConfigurationGroup"

            SampleConfigurationSection section = new SampleConfigurationSection();

            config.SectionGroups.Add("SampleConfigurationGroup", sectionGroup);

            sectionGroup.Sections.Add("sampleConfigurationSection", section);
            section.Foo.Baz = new CustomType {
                Height = 42, Width = 314, Depth = 313
            };

            section.Bars.Add(new Bar {
                Crackle = 3.14F, Snap = true
            });
            section.Bars.Add(new Bar {
                Crackle = 2.71828F, Snap = false
            });

            config.Save();
        }
        private void RunSampleConfigDemo(string configFilePath)
        {
            bool isTempConfigFile = string.IsNullOrEmpty(configFilePath);

            WriteStartResult("SAMPLE DEMO");
            try
            {
                string newConfigFilePath = "";
                // Create temp config file if no config specified.
                if (isTempConfigFile)
                {
                    CreateSampleConfigFile(out newConfigFilePath);
                    WriteResult("Created new config file! Path={0}\r\n", newConfigFilePath);
                    configFilePath = newConfigFilePath;
                }

                Configuration config = LoadConfigFile(configFilePath, isTempConfigFile);

                WriteResult("Loaded config file. Results:\r\n");

                ConfigurationSectionGroup sectionGroup = config.GetSectionGroup("SampleConfigurationGroup");

                WriteResult("\tSectionGroups[0]={0}.\r\n", sectionGroup.Name);

                //SampleConfigurationSection section = config.Sections["sample"] as SampleConfigurationSection;
                SampleConfigurationSection section = sectionGroup.Sections["sampleConfigurationSection"] as SampleConfigurationSection;

                WriteResult("\tsection.Samples: {0}\r\n", section.Samples);
                WriteResult("\tsection.Bars[0].Crackle: {0}\r\n", section.Bars[0].Crackle);

                WriteResult("\tFoo.Baz.Height: {0}\r\n", section.Foo.Baz.Height);
                WriteResult("\tFoo.Baz.Width: {0}\r\n", section.Foo.Baz.Width);
                WriteResult("\tFoo.Baz.Depth: {0}\r\n", section.Foo.Baz.Depth);

                // Delete config file if temp.
                if (isTempConfigFile)
                {
                    DeleteConfigFile(configFilePath);
                }
            }
            catch (Exception ex)
            {
                WriteResult("\r\nException Occured! {0}\r\n", ex);
            }
            finally
            {
                WriteEndResult();
            }
        }