Frage

Ich habe eine exe-Datei mit eine App.Config Datei.Jetzt möchte ich erstellen Sie eine wrapper-dll rund um die exe-Datei, um zu konsumieren, einige der Funktionalitäten.

Die Frage ist, wie kann ich den Zugriff auf die app.config-Eigenschaft in der exe-wrapper-dll?

Vielleicht sollte ich ein wenig mehr in meine Fragen, ich habe die folgende app.config Inhalte mit der exe-Datei:

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

Die Frage ist, wie, wie man "myValue" aus der wrapper-dll?


vielen Dank für deine Lösung.

Eigentlich meine ursprüngliche Konzept war zu vermeiden XML-Datei Lesen-Methode (LINQ) oder was auch immer.Meine bevorzugte Lösung war die Verwendung der configuration manager-Bibliotheken und ähnliches.

Ich werde jede Hilfe zu schätzen wissen, die verwendet die Klassen, die in der Regel im Zusammenhang mit dem Zugriff, app.Konfiguration Eigenschaften.

War es hilfreich?

Lösung 2

Nach einigen Tests, fand ich einen Weg, dies zu tun.

  1. Fügen Sie die App.Config Datei in das Testprojekt. Verwenden Sie "hinzufügen Als Link" Option.
  2. Verwenden Sie System.Configuration.ConfigurationManager.AppSettings["myKey"] den Wert zuzugreifen.

Andere Tipps

Die ConfigurationManager.OpenMappedExeConfiguration Methode ermöglicht es Ihnen, dies zu tun.

Beispiel aus der MSDN-Seite:

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

EDIT: Dies sollte Ausgabe des "myKey" Wert:

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

Ich denke, was Sie suchen ist:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

Ich würde zweite Gishu Punkt ist, dass eine andere Art und Weise gibt. Wäre es nicht besser, den gemeinsamen / „öffentlichen“ Teil des EXE ABSTACT heraus in DLL eine Wrapper-EXE erstellen, um sie auszuführen? Dies ist sicherlich die üblichen Muster der Entwicklung. Nur die Dinge, die Sie würde in die DLL konsumieren wollen, und die EXE alle Sachen tun würde, zur Zeit tut es, minus, was in die DLL gegangen ist.

Es ist eine xml-Datei, können Sie verwenden Linq-XML oder DOM basierten Ansätzen die relevanten Informationen parsen.
(Sagte, dass ich die Frage würde, wenn es kein besseres Design ist für alles, was es ist .. Sie versuchen, zu erreichen.)

einen Link in den IDE Hinzufügen würde nur während der Entwicklung helfen. Ich denke, lomaxx hat die richtige Idee: System.Configuration.ConfigurationManager.OpenExeConfiguration.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top