2009-10-21 8 views
7

Mein Verständnis ist, dass .NET nicht wirklich "Konfigurationsdateien" für DLLs "tut" - nur die Haupt-Executable oder Web-App bekommt eine Konfigurationsdatei, und alle DLLs von der ausführbaren/Web-App referenziert..NET-DLL-Einstellungen und -Konfigurationen, wenn eine Webreferenz vorhanden ist - was ist los?

Wenn Sie jedoch in VS2008 ein Webverweis zu einem Klassenbibliotheksprojekt (DLL) hinzufügen, fügt es dem Projekt eine Settings.Settings-Datei und eine app.config-Datei hinzu. Sie enthalten die Haupt-URL für die Webreferenz.

Wozu dienen diese Dateien? Es gibt keine Möglichkeit für die DLL, sie ohne Hilfe zu lesen, oder?

edit: Der Inhalt der app.config und Settings.Settings scheint jedoch einen Unterschied zu machen: Ändern (zum Beispiel) der Web Reference URL in der DLL-Projekt app.config-Datei allein macht keinen Unterschied, aber wenn Bearbeiten Sie die URL in der Datei app.config und öffnen Sie dann die Datei Settings.Settings. Die Änderungen, die Sie in app.config vorgenommen haben, werden dann in Settings.Settings kopiert. Und dann nimmt die DLL den neuen Wert zur Laufzeit auf. Wie macht es das?

edit: Teil meiner Verwirrung hier ist, weil ich nicht zu klar auf den Unterschied zwischen Settings.Settings und app.config und wie sie zueinander stehen, so können vielleicht Menschen mit diesem Problem auch helfen.

Antwort

6

Es gibt keine Möglichkeit für die DLL, sie zu lesen, aber sie sind starke Hinweise auf einen Verbraucher Ihrer DLL von dem, was sie wollen, könnten in der realen Settings/Config-Datei

bearbeiten

enthalten

Als Reaktion auf den Kommentar von OP - Was immer zuletzt in den Einstellungen bearbeitet wurde, wird als Standard in den Code kompiliert, wenn keine Einstellung des richtigen Namens zur Laufzeit vorliegt. Deshalb funktioniert das.

+0

Änderungen an den app.config in die Settings.settings Datei kopiert werden und dann zur Laufzeit zu bekommen scheint aufgehoben, so dass ihre nicht nur für die Show.Siehe meine Bearbeitung oben – codeulike

+0

Ah, danke. Ich war nicht zu klar auf dem Weg app.config zu Settings.Settings, so dass Ihre Bearbeitung hilft. – codeulike

6

Visual Studio hat das Zeug irgendwo hinzufügen und sie nicht wissen, welche Anwendung Sie es in setzen möchten Sie die Config für die DLL, indem Sie die folgenden zugreifen können.

var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config"); 

nur ein einziges Mal Ich fand das nützlich, als ich ein Plugin als DLL für eine Drittanbieteranwendung schrieb und wollte, dass meine DLL konfigurierbar ist (was die meisten Leute nicht oft tun, vermute ich).

In der Regel werden Sie nur die benötigten Konfigurationsteile in Ihre app.config oder web.config verschieben.

Bearbeiten - In Bezug auf Ihr Update, das Sinn macht. Settings.settings-Anwendungsbereichseinstellungen stammen aus der App.config-Datei der Anwendung. Für Anwendungsbereichs-Einstellungen ist dies nur eine stark typisierte Klasse, die diese Einstellungen darstellt.

+0

So DLLs können Settings.Settings Dateien haben und sie zur Laufzeit lesen? Woher kommt der Inhalt dieser Dateien nach einem Build? – codeulike

+0

Nein, die DLL mit einer Settings.Settings-Datei liest sie aus der app.config/web.config. Wenn das nicht gefunden werden kann, wird es auf die Standardwerte zurückgesetzt. – RichardOD

+0

Ich denke, ich verwirre Sie, mit meiner Verwendung des Begriffs app.config. Ich meine die Konfigurationsdatei der Hauptanwendung (MyApp.exe.config oder Web.config). Für mich ist die DLL-Konfiguration wirklich MyDll.dll.config. HTH – RichardOD

-2

Es gibt eine Möglichkeit, von Konfigurationsdateien in DLL zu lesen. Fügen Sie dem DLL-Projekt einfach eine app.config-Datei hinzu, und stellen Sie sicher, dass Sie die Konfigurationseinstellungen in der DLL lesen. Nach der Bereitstellung muss Ihre Konfigurationsdatei den Namen "MyDLL.dll.config" haben (vorausgesetzt, Ihre DLL heißt "MyDLL.dll") und sich im selben Ordner wie die DLL befinden.

Der folgende Code sollte meinen Connectionstring aus meiner dll zurück:

return ConfigurationManager.AppSettings["ConnectionString"];

+4

Das wird nicht funktionieren. – RichardOD

+0

Auch das ist nicht das, was ich frage. Ich frage nicht, wie man eine Config-Datei mit einer DLL arbeiten lässt, ich frage mich, warum Visual Studio Mühe hat, eine für ein DLL-Projekt hinzuzufügen. – codeulike

+0

Getestet in .NET 4.6 und bestätigt, dass dies immer noch nicht funktioniert. – EM0