Pregunta

tengo un exe con un App.Config archivo.Ahora quiero crear un dll contenedor alrededor del exe para poder consumir algunas de las funcionalidades.

La pregunta es ¿cómo puedo acceder a la propiedad app.config en el exe desde el dll contenedor?

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" del dll 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 utilizar el bibliotecas del administrador de configuración y similares.

Agradeceré cualquier ayuda que utilice las clases que normalmente están asociadas con el acceso a las propiedades de app.config.

¿Fue útil?

Solución 2

Después de algunas pruebas, encontré una manera de hacer esto.

  1. Agregue el archivo App.Config al proyecto de prueba.Utilice la opción "Agregar como enlace".
  2. Usar System.Configuration.ConfigurationManager.AppSettings["myKey"] para acceder al valor.

Otros consejos

El ConfigurationManager.OpenMappedExeMétodo de configuración 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);

Creo que lo que estás buscando es:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

Apoyaría el punto de Gishu de que hay otra manera.¿No sería mejor abstener la parte común/"pública" del EXE en una DLL y crear un EXE contenedor para ejecutarlo?Este es ciertamente el patrón de desarrollo más habitual.Sólo las cosas que desea consumir irían a la DLL, y el EXE haría todo lo que hace actualmente, menos lo que está dentro de la DLL.

Es un archivo xml, puede utilizar enfoques basados ​​en Linq-XML o DOM para analizar la información relevante.
(Dicho esto, me preguntaría si no hay un mejor diseño para lo que sea...estás tratando de lograr.)

Agregar un enlace en el IDE solo ayudaría durante el desarrollo.Creo que lomaxx tiene la idea correcta: System.Configuration.ConfigurationManager.OpenExeConfiguration.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top