c# - Obtenga la App.Config de otro Exe
.net configuration-files (6)
Tengo un exe con un archivo App.Config
. Ahora quiero crear un contenedor dll alrededor del exe para consumir algunas de las funcionalidades.
La pregunta es ¿cómo puedo acceder a la propiedad app.config en el archivo exe del wrapper dll?
Tal vez debería ser un poco más en mis preguntas, tengo el siguiente contenido de app.config con el exe:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="myKey" value="myValue"/>
</appSettings>
</configuration>
La pregunta es ¿cómo sacar "myValue" de la dll de contenedor?
gracias por tu solución
En realidad, mi concepto inicial era evitar el método de lectura de archivos XML o LINQ o lo que sea. Mi solución preferida era usar las bibliotecas del administrador de configuración y similares .
Agradeceré cualquier ayuda que use las clases que normalmente están asociadas con el acceso a las propiedades de app.config.
Después de algunas pruebas, encontré la manera de hacer esto.
- Agregue el archivo App.Config al proyecto de prueba. Use la opción "Agregar como enlace".
- Use
System.Configuration.ConfigurationManager.AppSettings["myKey"]
para acceder al valor.
Es un archivo xml, puede usar enfoques basados en Linq-XML o DOM para analizar la información relevante.
(Eso dijo que cuestionaría si no hay un diseño mejor para lo que sea ... estás tratando de lograrlo).
Yo sugeriría el punto de Gishu de que hay otra manera. ¿No sería mejor eliminar la parte común / "pública" del EXE en DLL para crear un contenedor EXE para ejecutarlo? Este es sin duda el patrón de desarrollo más habitual. Solo las cosas que desea consumir irían a la DLL, y el EXE haría todas las cosas que hace actualmente, menos lo que se ha ido en la DLL.
Agregar un enlace en el IDE solo ayudaría durante el desarrollo. Creo que lomaxx tiene la idea correcta: System.Configuration.ConfigurationManager.OpenExeConfiguration.
Creo que lo que estás buscando es:
System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
El método ConfigurationManager.OpenMappedExeConfiguration te permitirá hacer esto.
Muestra de la página de MSDN:
static void GetMappedExeConfigurationSections()
{
// Get the machine.config file.
ExeConfigurationFileMap fileMap =
new ExeConfigurationFileMap();
// You may want to map to your own exe.comfig file here.
fileMap.ExeConfigFilename =
@"C:/test/ConfigurationManager.exe.config";
System.Configuration.Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(fileMap,
ConfigurationUserLevel.None);
// Loop to get the sections. Display basic information.
Console.WriteLine("Name, Allow Definition");
int i = 0;
foreach (ConfigurationSection section in config.Sections)
{
Console.WriteLine(
section.SectionInformation.Name + "/t" +
section.SectionInformation.AllowExeDefinition);
i += 1;
}
Console.WriteLine("[Total number of sections: {0}]", i);
// Display machine.config path.
Console.WriteLine("[File path: {0}]", config.FilePath);
}
EDITAR: Esto debería generar el valor "myKey":
ExeConfigurationFileMap fileMap =
new ExeConfigurationFileMap();
fileMap.ExeConfigFilename =
@"C:/test/ConfigurationManager.exe.config";
System.Configuration.Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(fileMap,
ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);