Tecla C # Linq .ToDictionary () já existe

Final Edit: Consegui localizar o campo duplicado no arquivo ini. Obrigado pela vossa ajuda a todos!

Eu estou usando uma expressão regular para analisar um arquivo ini e LINQ para armazená-lo em um dicionário:

Dados de amostra:
[WindowSettings]
Janela X Pos = '0'
Janela Y Pos = '0'
Janela Maximizada = 'falsa'
Nome da Janela = 'Jabberwocky'

[Exploração madeireira]
Diretório = 'C: \ Rosetta Stone \ Logs'

EDIT: Aqui está o arquivo realmente causando o problema:http://pastebin.com/mQSrkrcP

EDIT2: Eu reduzi a causa da última seção no arquivo: [list_first_nonprintable]

Por algum motivo, um dos arquivos que estou analisando com isso está lançando essa exceção:

System.ArgumentException: um item com a mesma chave já foi adicionado.

Existe alguma maneira de eu descobrir qual chave está causando o problema (para que eu possa corrigir o arquivo) ou simplesmente ignorar a chave que está causando isso e continuar a análise?

Aqui está o código:

try
{
    // Read content of ini file.
    string data = System.IO.File.ReadAllText(project);

    // Create regular expression to parse ini file.
    string pattern = @"^((?:\[)(?<Section>[^\]]*)(?:\])(?:[\r\n]{0,}|\Z))((?!\[)(?<Key>[^=]*?)(?:=)(?<Value>[^\r\n]*)(?:[\r\n]{0,4}))*";
    //pattern = @"
    //^                           # Beginning of the line
    //((?:\[)                     # Section Start
    //     (?<Section>[^\]]*)     # Actual Section text into Section Group
    // (?:\])                     # Section End then EOL/EOB
    // (?:[\r\n]{0,}|\Z))         # Match but don't capture the CRLF or EOB
    // (                          # Begin capture groups (Key Value Pairs)
    //  (?!\[)                    # Stop capture groups if a [ is found; new section
    //  (?<Key>[^=]*?)            # Any text before the =, matched few as possible
    //  (?:=)                     # Get the = now
    //  (?<Value>[^\r\n]*)        # Get everything that is not an Line Changes
    //  (?:[\r\n]{0,4})           # MBDC \r\n
    //  )*                        # End Capture groups";

    // Parse each file into a Dictionary.
    Dictionary<string, Dictionary<string, string>> iniFile
                    = (from Match m in Regex.Matches(data, pattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline)
                       select new
                       {
                           Section = m.Groups["Section"].Value,

                           kvps = (from cpKey in m.Groups["Key"].Captures.Cast<Capture>().Select((a, i) => new { a.Value, i })
                                   join cpValue in m.Groups["Value"].Captures.Cast<Capture>().Select((b, i) => new { b.Value, i }) on cpKey.i equals cpValue.i
                                   select new KeyValuePair<string, string>(cpKey.Value, cpValue.Value)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value)

                       }).ToDictionary(itm => itm.Section, itm => itm.kvps);

    return iniFile;
}
catch (ArgumentException ex)
{
    System.Diagnostics.Debug.Write(ex.ToString());
    return new Dictionary<string, Dictionary<string, string>>();
}

Desde já, obrigado.

questionAnswers(3)

yourAnswerToTheQuestion