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.

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;

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");

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.