Olá pessoal, hoje gostaria de informar e mostrar como criar novas sections customizadas. Até o momento testei a solução no Visual Studio .NET 2010 e 2005, funcionou perfeitamente. Acredito que funcione nas versões sem qualquer problema.

Usado para desenvolvimento:
- Visual Studio .NET 2010
- Linguagem C#.NET
- Web.config

    O primeiro passo foi gerar a o website ou o projeto do tipo web. Dependendo da forma que gerar, é necessário inserir alguns dados a mais no web.config da aplicação. Com base neste artigo, você pode criar várias outras formas de desenvolvimento e customização de sectionConfigurations.
    Segundo passo foi gerar uma classe .cs para configuração do arquivo. Criei a classe CustomConfiguration.cs.

Importes necessários: (Code 1.1)

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
Code 1.1

    É necessário extender a classe ConfigurationSection. (Code 1.2)

public class CustomConfiguration : ConfigurationSection
{}
Code 1.2

    O passo seguinte foi gerar duas propriedades dentro do arquivo de configuração. Os dois artigos são do tipo Int32. (Code 1.3)

    // First Number Property
    [ConfigurationProperty("firstNumber", DefaultValue=1, IsRequired=true)]
    [IntegerValidator(MinValue=-100, MaxValue=100)]
    public Int32 FirstNumber
    {
        get
        { return (Int32)this["firstNumber"]; }
        set
        { this["firstNumber"] = value; }
    }

    // Second Number Property
    [ConfigurationProperty("secondNumber", DefaultValue=1, IsRequired=true)]
    [IntegerValidator(MinValue=-100, MaxValue=100)]
    public Int32 SecondNumber
    {
        get
        { return (Int32)this["secondNumber"]; }
        set
        { this["secondNumber"] = value; }
    }
Code 1.3

    Gerei o construtor recebendo dois parâmetros de entrada. Um construtor vazio e outro recebendo parâmetro. (Code 1.4)

// Construtor vazio
    public CustomConfiguration()
    {
    }


   // Construtor recebendo parâmetros
    public CustomConfiguration (Int32 firstValue, Int32 secondValue)
    {
        FirstNumber = firstValue;
        SecondNumber = secondValue;
    }
Code 1.4

    O próximo passo é gerar dentro do arquivo web.config as configurações customizadas. Dentro da tag <configuration> existe <configSections> responsável para configuração da sectionGroup. (Code 1.5).

<sectionGroup name="customSection">
   <section name="settings" type="CustomConfiguration" allowLocation="true" allowDefinition="Everywhere" />
</sectionGroup>
Code 1.5

    Note que o tipo (type) é o mesmo nome da classe de configuração. O nome (name) settings é o nome que escolhi para gerar a segunda tag customizada. Se a sua aplicação estiver usando namespace, basta colocar no tipo todo o namespace até a classe.

<sectionGroup name="customSection">
   <section name="settings" type="MinhaAplicacao.Classe.Util,CustomConfiguration" allowLocation="true" allowDefinition="Everywhere" />
</sectionGroup>

    Depois de fechar a tag </configSections>
é necessário inserir a outra customizada com os valores e as duas propriedades. (Code 1.6)

<customSection>
 <settings firstNumber="20"secondNumber="43" />
</customSection>
Code 1.6

     Note que a sessão customizada possui os mesmos nomes colocados na primeira tag. O nome customSection foi gerada na segunda tag XML e assim por diante. As duas propriedades firstNumber e secondNumber possuem valores do tipo inteiro na segunda tag XML adicionada.

<configSections>
  <sectionGroup name="customSection">
    <section name="settings" type=" MinhaAplicacao.Classe.Util.CustomConfiguration, MinhaAplicacao" allowLocation="true" allowDefinition="Everywhere" />
  </sectionGroup>
</configSections>


    Dessa maneira, a classe de leitura foi feita e o arquivo config gerado, basta agora mostrar como é feito a leitura desses valores. Para ler o arquivo, basta colocar o código 1.7.

CustomConfiguration config = (CustomConfiguration)System.Configuration.ConfigurationManager.GetSection("customSection/settings");
Code 1.7

    Essa linha de código pode ser colocada no seu Page_Load sem qualquer problema.
    O GetSection("customSection/settings");
busca  diretamente as tags com este nome. Fica simples depois, basta pegar as propriedades.
    Colocando a instância e ponto aparece o nome da propriedade.

Int32 primeiro = config.FirstNumber
Int32 segundo = config.SecondNumber
Code 1.8

Somando os valores veja o resultado.