11 Stimmen

Settings.Default.<property> liefert immer den Standardwert anstelle des Wertes im persistenten Speicher (XML-Datei)

Ich habe kürzlich eine DLL in C# (.Net 2.0) geschrieben, die eine Klasse enthält, die eine IP-Adresse benötigt. Ein Kollege von mir änderte die Klasse, um die IP-Adresse aus einer ".dll.config" (XML)-Datei abzurufen - diese wird offenbar automatisch von der von ihm erstellten Datei "Anwendungseinstellungen" (Settings1.settings) erzeugt. Dies hatte den Vorteil, dass der Endbenutzer die IP-Adresse in der XML/Konfigurationsdatei nach Belieben ändern konnte.

Wenn ich seinen Code aus dem Baum auschecke und versuche, diesen neuen Code zu kompilieren (oder zu verwenden), erhält leider jede Anwendung, die diese DLL aufruft, nur den Standardwert und nicht den Wert aus der Datei.

Der Konstruktor, der die Konfigurationsdatei aufruft, sieht folgendermaßen aus:

    public class form : System.Windows.Forms.Form
    {
        public form()
        {
            // This call is required by the Windows Form Designer.
            InitializeComponent();
            IP = IPAddress.Parse(Settings1.Default.IPAddress);
        }
    }

Ich fand einen Hinweis auf dieses Problem in den MSDN-Foren wo ein Benutzer sagte:

die "alten" Werte (die Sie zur Entwicklungszeit festlegen) sind fest kodiert. Wenn das Franework nicht in der Lage ist, auf die Konfigurationsdatei zuzugreifen oder sie zu öffnen, werden stattdessen die Standardwerte verwendet. Dies ist immer der Fall, wenn Sie Einstellungen in einer DLL verwenden.

  1. Bedeutet dies, dass ich einen externen Wert für eine DLL nicht in einer Konfigurationsdatei speichern kann? (Mein Kollege hat das irgendwie zum Laufen gebracht...)

  2. Da mein Framework nicht in der Lage zu sein scheint, auf die Konfigurationsdatei zuzugreifen oder sie zu öffnen, wie kann ich herausfinden, warum es fehlschlägt? Oder sogar erkennen, wenn dies geschieht?

Decker : Das hilft ein wenig. Leider schreibe ich diese DLL für eine Spezifikation, so dass ich eigentlich keinen Zugriff auf die Konfigurationsdatei der Anwendung habe. Wie Sie oben sehen, hat mein Kollege eine "Settings"-Datei erstellt. 1 .settings"-Datei. Damals habe ich das nicht verstanden, aber jetzt scheint es, dass das Hinzufügen der "1" die Datei aus dem Einstellungsbereich jeder Anwendung, die sie aufruft, heraushält.

Ich schätze, was ich herauszufinden versuche, ist, warum die DLL die Konfigurationsdatei nicht zu finden scheint, die neben ihr im selben Verzeichnis liegt. Tracing durch den Code Schritt-für-Schritt zeigt nichts.

Nebenbei kann ich den "Output Type" meiner Assembly von "Class Library" auf "Windows Application" ändern und die folgenden Zeilen am Anfang meines DLL-Codes hinzufügen:

    [STAThread]
    public static void Main(string[] args)
    {
        System.Windows.Forms.Application.Run(new form());
    }

Wenn ich das Programm ausführe, wird eine andere Konfigurationsdatei (eine ".exe.config") erzeugt, die ich ändern kann, um die neuen Daten aus der Datei zu übernehmen. Ich bin also ein bisschen verwirrt. Hat jemand eine Idee?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X