c# .net vb.net

c# - OpenMappedExeConfiguration vs. OpenExeConfiguration



.net vb.net (2)

La diferencia entre OpenExeConfiguration (String) y OpenMappedExeConfiguration (ExeConfigurationFileMap, ConfigurationUserLevel) es que la versión mapeada le permitirá elegir el archivo de configuración que desea abrir utilizando un ExeConfigurationFileMap.

Si usa la OpenExeConfiguration(string) , se abrirá la configuración usando las ubicaciones de configuración de Máquina y Exe, mientras que la versión mapeada le permitirá elegir el archivo específico que desea cargar desde cualquier ubicación (obviamente respetando los permisos, etc.).

Si echas un vistazo al origen, ambos métodos realmente llaman al mismo método de implementación:

public static System.Configuration.Configuration OpenMappedExeConfiguration(ExeConfigurationFileMap fileMap, ConfigurationUserLevel userLevel) { return OpenExeConfigurationImpl(fileMap, false, userLevel, null); } public static System.Configuration.Configuration OpenExeConfiguration(string exePath) { return OpenExeConfigurationImpl(null, false, ConfigurationUserLevel.None, exePath); }

Entonces, ¿cuándo usar uno sobre el otro? Use OpenMappedExeConfiguration cuando no quiera abrir el archivo de configuración predeterminado. En mi experiencia, la única vez que llamo a cualquiera de estos métodos es cuando quiero leer una configuración no predeterminada, así que solo he usado OpenMappedExeConfiguration .

OpenExeConfiguration tiene 2 sobrecargas:

OpenMappedExeConfiguration tiene solo 1 prototipo:

Parece que tanto (2) como (3) se pueden usar para abrir un archivo de configuración específico en lugar del archivo predeterminado app.config.

Entonces, ¿cuál es la diferencia entre ellos? ¿Cuándo usar qué?

¿Por qué separamos el UserLevel y Config File Location en (1) y (2), pero los combinamos en (3)?

Gracias por cualquier respuesta.

Actualizar

Sé que a Microsoft siempre le gusta hacer las cosas de más de una manera. Pero debería hacerlo por una razón. ¿Alguien sabe el motivo en mi pregunta? ¿Necesitamos una recompensa;)?


La diferencia se explica en el último recurso de configuración .NET: Cracking the Mysteries of .NET 2.0 Configuration :

OpenExeConfiguration (String)

agregará ".config" al nombre de archivo que proporcione y cargará ese archivo de configuración. Es importante tener en cuenta que OpenExeConfiguration (string exePath) es un método muy engañoso, ya que el nombre de archivo no tiene que ser el nombre de archivo del .exe que se está ejecutando [...] Proporcionando un nombre de archivo que no sea EXE, una alternativa * archivo .config se puede abrir.

OpenExeConfiguration (ConfigurationUserLevel)

El segundo método, OpenExeConfiguration (ConfigurationUserLevel level) cargará el archivo de configuración apropiado para el nivel de configuración especificado. Los niveles de configuración, disponibles en el contexto Exe, le permiten especificar si desea la configuración de usuario exe, roaming o local [...] Recuerde que la configuración es jerárquica y fusionada. Al solicitar la itinerancia o la configuración del usuario local, ese nivel se combina con machine.config, lo que da como resultado la configuración completa a la que puede acceder su aplicación para el nivel de usuario dado.

OpenMappedExeConfiguration (), OpenMappedMachineConfiguration ()

A diferencia de los métodos OpenExeConfiguration (), que hacen varias suposiciones sobre dónde residen sus archivos de configuración, OpenMappedExeConfiguration () y OpenMappedMachineConfiguration () le permiten especificar explícitamente dónde residen sus archivos * .config en el disco. Con estos métodos, puede cargar un machine.config alternativo, cargar archivos User.config desde las ubicaciones que elija (y dejar que el framework .NET decida sobre alguna ruta enrevesada), etc. Al acceder a machine.config, una costumbre no es necesaria la versión, se debe usar OpenMachineConfiguration () en su lugar.