Domanda

Ho un exe con un App.Config file.Ora voglio creare una dll wrapper attorno all'exe per utilizzare alcune funzionalità.

La domanda è: come posso accedere alla proprietà app.config nell'exe dalla DLL wrapper?

Forse dovrei essere un po' più attento nelle mie domande, ho il seguente contenuto app.config con l'exe:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="myKey" value="myValue"/>
  </appSettings>
</configuration>

La domanda è: come ottenere "myValue" dalla dll wrapper?


grazie per la tua soluzione

In realtà il mio concetto iniziale era quello di evitare il metodo di lettura di file XML o LINQ o altro.La mia soluzione preferita era usare il file librerie del gestore di configurazione e simili.

Apprezzerò qualsiasi aiuto che utilizzi le classi normalmente associate all'accesso alle proprietà app.config.

È stato utile?

Soluzione 2

Dopo alcuni test, ho trovato un modo per farlo.

  1. Aggiungere il file App.Config al progetto di test.Utilizza l'opzione "Aggiungi come collegamento".
  2. Utilizzo System.Configuration.ConfigurationManager.AppSettings["myKey"] per accedere al valore.

Altri suggerimenti

IL Metodo di configurazione ConfigurationManager.OpenMappedExe ti permetterà di farlo.

Esempio dalla pagina 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);
}

MODIFICARE:Questo dovrebbe restituire il valore "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);

Penso che quello che stai cercando sia:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

Concordo con il punto di Gishu secondo cui esiste un altro modo.Non sarebbe meglio astrarre la parte comune/"pubblica" dell'EXE nella DLL e creare un EXE wrapper per eseguirlo?Questo è certamente il modello di sviluppo più usuale.Solo il materiale che desideri consumare andrebbe nella DLL e l'EXE farebbe tutto ciò che fa attualmente, meno ciò che è andato nella DLL.

È un file xml, puoi utilizzare approcci basati su Linq-XML o DOM per analizzare le informazioni rilevanti.
(detto questo mi chiederei se non esista un design migliore per qualunque cosa sia..stai cercando di ottenere.)

L'aggiunta di un collegamento nell'IDE sarebbe utile solo durante lo sviluppo.Penso che lomaxx abbia l'idea giusta: System.Configuration.ConfigurationManager.OpenExeConfiguration.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top