Frage

Wir haben ein „Motor“, die DLLs lädt dynamisch (was auch immer in einem bestimmten Verzeichnis befindet) und ruft Workflow-Klassen von ihnen durch Reflexion.

Wir haben jetzt einige neue Workflows, die den Zugriff auf eine Datenbank benötigen, so dass ich dachte, dass ich eine Config-Datei in dem DLL-Verzeichnis setzen würde.

Aber aus irgendeinem Grunde meine Workflows einfach nicht sehen, die Config-Datei.

<configuration>
  <appSettings>
      <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
  </appSettings>
</configuration>

In Anbetracht der obigen Konfigurationsdatei, der folgende Code gibt eine leere Zeichenfolge:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);

Ich denke, was ich will, ist nur eine Konfigurationsdateinamen angeben, aber ich habe Probleme hier. Ich bekomme einfach nicht Ergebnisse. Jemand irgendwelche Hinweise haben?

War es hilfreich?

Lösung

Wenn Ihr Codebeispiel die AppSettings zum Lesen ist in der DLL, dann wird er versuchen, die Konfigurationsdatei für die Anwendung und nicht die Config-Datei für die DLL zu lesen. Dies liegt daran, Sie Reflexion verwenden um den Code auszuführen.

Andere Tipps

Lustig, wo ich bin, in denen wir etwas sehr ähnlich und die Konfigurationsdatei lädt ganz gut tun. In unserem Fall denke ich, jede neue Name der Konfigurationsdatei übereinstimmt, davon Baugruppe zugeordnet ist. So hätte MyLibrary.dll eine Datei mit dem Namen MyLibrary.dll.config mit Informationen für diese Datei Montag. Auch das Beispiel, das ich zur Hand haben ist mit VB.Net statt C # (wir einige von jeweils) und alle Einstellungen in es für die VB-spezifischen My.Settings Namespace, so dass wir nicht verwenden die Konfigurationsmanager-Klasse direkt zu lesen sie.

Die Einstellungen selbst wie folgt aussehen:

<applicationSettings>
    <MyLibrary.My.MySettings>
        <setting name="SomeSetting" serializeAs="String">
            <value>12345</value>
        </setting>
    </MyLibrary.My.MySettings>
</applicationSettings>

Ich schrieb dies für ein ähnliches System. Meine Erinnerung ist, dass ich Assembly.GetExecutingAssembly verwendet, um den Dateipfad zur DLL zu erhalten, die beigefügten .config auf diesen Namen, lud sie als XmlDocument, navigiert der <appSettings> Knoten und übergeben, die zu einer NameValueSectionHandler Methode des Create.

Hier ist eine Möglichkeit - AppDomain.CurrentDomain.SetData ( "APP_CONFIG_FILE", "Pfad zur Konfigurationsdatei");

Rufen Sie im Konstruktor.

Wenn ich mich richtig erinnere, wird die app.config aus Ihrem Anwendungsverzeichnis geladen werden, also wenn Sie DLLs von einem anderen Verzeichnis geladen werden, müssen Sie die Schlüssel, die sie benötigen, wollen in der Konfigurationsdatei Ihrer Anwendung.

Ich bin mir nicht ganz sicher, aber ich denke, dass Klasse nur mit dem Pfad des Eingabemethode des AppDomain (den Pfad der exe die meiste Zeit) standardmäßig funktioniert. Sie müssen OpenExeConfiguration (string ExePath) nennen (2.0 Framework und später) zunächst auf eine andere Konfigurationsdatei zeigen.

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