Cargando archivos de configuración personalizados

118

Sé que puedo abrir archivos de configuración relacionados con un ensamblado con el ConfigurationManager.OpenExe(exePath)método estático , pero solo quiero abrir una configuración que no esté relacionada con un ensamblado. Solo un archivo de configuración .NET estándar.

Adán
fuente

Respuestas:

244

los artículos publicados por Ricky son muy buenos, pero desafortunadamente no responden a tu pregunta.

Para resolver su problema, debe probar este código:

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

Si necesita acceder a un valor dentro de la configuración, puede usar el operador de índice:

config.AppSettings.Settings["test"].Value;
Oliver
fuente
1
@Oliver Por whateverYouLikeExtension, ¿quieres decir que debes tener algo después config.?
Svish
4
@Oliver Se dio la vuelta para intentarlo ahora, y parece funcionar bien sin :)
Svish
1
Hice esto, pero cuando accedo a ConfigurationManager.ConnectionStrings todavía obtengo los datos antiguos. ¿Qué me estoy perdiendo?
MAW74656
1
@ MAW74656: No tiene que acceder ConfigurationManager.ConnectionStrings. En su lugar, debe leer el valor del configobjeto devuelto por la última declaración anterior.
Oliver
3
Para cualquier otra persona que busque cómo obtener los ajustes de aplicación una vez hecho esto: var foo = config.AppSettings.Settings ["prueba"]. Value;
Roro
8

El archivo de configuración es solo un archivo XML, puede abrirlo de la siguiente manera:

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;
    }
}

y luego recuperando valores mediante:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
fuente
Código inalcanzable detectado después throw new Exception("No configuration file found.", e);.
Oybek
Eliminaré el retorno nulo, realmente no se alcanzará.
Otávio Décio
7
por qué usar XML cuando tienes clases tan buenas de la biblioteca .Net. No sugeriría usar esto, pobre en diseño. ¿Qué sigue? implementar una clase de cadena diferente ... considere esto.
Yuki
@ OtávioDécio ¿Puedo agregar system.diagnostics para habilitar el rastreo en un archivo .config personalizado?
FaizanHussainRabbani
@FaizanRabbani no está seguro sobre el seguimiento personalizado, pero de acuerdo con msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx , debería poder agregar diagnósticos en el archivo de configuración.
Otávio Décio