Carregando arquivos de configuração personalizados

118

Sei que posso abrir arquivos de configuração relacionados a uma montagem com o ConfigurationManager.OpenExe(exePath)método estático , mas quero apenas abrir uma configuração não relacionada a uma montagem. Apenas um arquivo de configuração .NET padrão.

Adão
fonte

Respostas:

244

os artigos postados por Ricky são muito bons, mas infelizmente não respondem à sua pergunta.

Para resolver seu problema, você deve tentar este trecho de código:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Se precisar acessar um valor dentro da configuração, você pode usar o operador de índice:

config.AppSettings.Settings["test"].Value;
Oliver
fonte
1
@Oliver By whateverYouLikeExtension, você quer dizer que deve comer algo depois config.?
Svish
4
@Oliver Consegui tentar agora e parece funcionar bem sem :)
Svish
1
Eu fiz isso, mas quando acesso o ConfigurationManager.ConnectionStrings ainda estou obtendo os dados antigos. o que estou perdendo?
MAW74656
1
@ MAW74656: Você não precisa acessar ConfigurationManager.ConnectionStrings. Em vez disso, você deve ler o valor do configobjeto retornado da última instrução acima.
Oliver
3
Para qualquer pessoa que esteja pesquisando como obter o appSettings depois que isso for feito: var foo = config.AppSettings.Settings ["test"]. Value;
Roro
8

O arquivo de configuração é apenas um arquivo XML, você pode abri-lo:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

e depois recuperando valores por:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
fonte
Código inacessível detectado depois throw new Exception("No configuration file found.", e);.
Oybek
Vou remover o nulo de retorno, ele não será realmente alcançado.
Otávio Décio
7
por que usar XML quando você tem classes tão boas da biblioteca .Net. Eu não sugeriria usar isso, pobre em design. Qual o proximo? implementar uma classe de string diferente ... considere isso.
Yuki
@ OtávioDécio Posso adicionar system.diagnostics para habilitar o rastreamento no arquivo .config personalizado?
FaizanHussainRabbani 01 de
@FaizanRabbani não tem certeza sobre o rastreamento personalizado, mas de acordo com msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx, você deve ser capaz de adicionar diagnósticos no arquivo de configuração.
Otávio Décio