Caricamento dei file di configurazione personalizzati


119

So di poter aprire file di configurazione relativi a un assembly con il ConfigurationManager.OpenExe(exePath)metodo statico , ma voglio solo aprire una configurazione che non è correlata a un assembly. Solo un file di configurazione .NET standard.

Risposte:


244

gli articoli postati da Ricky sono molto buoni, ma purtroppo non rispondono alla tua domanda.

Per risolvere il tuo problema dovresti provare questo pezzo di codice:

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

Se è necessario accedere a un valore all'interno della configurazione è possibile utilizzare l'operatore di indice:

config.AppSettings.Settings["test"].Value;

1
@ Oliver By whateverYouLikeExtension, vuoi dire che devi avere qualcosa dopo config.?
Svish

4
@Oliver È arrivato per provare ora e sembra funzionare bene senza :)
Svish

1
L'ho fatto, ma quando accedo a ConfigurationManager.ConnectionStrings ricevo ancora i vecchi dati. Cosa mi manca?
MAW74656

1
@ MAW74656: non è necessario accedere ConfigurationManager.ConnectionStrings. Invece devi leggere il valore configdall'oggetto restituito dall'ultima istruzione sopra.
Oliver

3
Per chiunque altro cerchi come ottenere appSettings dopo aver eseguito questa operazione: var foo = config.AppSettings.Settings ["test"]. Value;
Roro

8

Il file di configurazione è solo un file XML, puoi aprirlo:

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 successivamente recuperando i valori tramite:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");

Codice non raggiungibile rilevato dopo throw new Exception("No configuration file found.", e);.
Oybek

Rimuoverò il valore nullo di ritorno, non sarà realmente raggiunto.
Otávio Décio

7
perché usare XML quando hai classi così grandi dalla libreria .Net. Non suggerirei di usarlo, povero di design. E dopo? implementare una diversa classe di stringhe ... considera questo.
Yuki

@ OtávioDécio Posso aggiungere system.diagnostics per abilitare la traccia nel file .config personalizzato?
FaizanHussainRabbani

@FaizanRabbani non è sicuro del tracciamento personalizzato, ma secondo msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx dovresti essere in grado di aggiungere la diagnostica sul file di configurazione.
Otávio Décio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.