Wie zu Lesen ist-Werte aus der App.config .Net 4.0 mit configurationManager?
Erstelle ich einen windows Dienst in .Net 4.0 und dem testen einiger Funktionen des Sprach-service mit einer windows-forms-client durch einen Verweis auf die service-Projekt.
Den service-Projekt hat eine App.config-Datei und die Datei sieht wie folgt aus:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<clear />
<add name="myLocalMySQLDBUsername" connectionString="username"/>
</connectionStrings>
</configuration>
Wenn eine Funktion gehören die service-Aufrufe:
- ConfigurationManager.ConnectionStrings("myLocalMySQLDBUsername").ConnectionString
einer null-Referenz-Fehler ausgelöst, weil mein connection string ist nicht geladen. Den nur connectionStrings, die geladen werden sind von der Maschine.config-Datei befindet sich in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
Wenn ich eine Anwendung erstellen, die Rahmen-Einstellung für den Dienst, den ich bekommen kann, die Einstellung mit der Meinen.Einstellungen.Einstellung -> so ist es nicht wie die App.config-file nicht Lesen.
Meine Frage ist: warum sind meine connectionStrings nicht geladen aus dem App.config-Datei?
Danke für Eure Hilfe.
UPDATE:
Auch, an dieser Stelle auch ein umgehen würde geschätzt werden; der einzige Grund für die Verwendung der app.config ist in der Lage sein, der zum verschlüsseln der Inhalte unter Verwendung der DpapiProtectedConfigurationProvider (die Inhalte müssen einige Benutzernamen/Passwort-Werte für service-und Datenbank-verbindungen).
Habe ich versucht die Schaffung einer AppSettings-Abschnitt manuell in die app.config, aber diese Einstellungen waren auch nicht gelesen von der configurationManager (count = 0).
UPDATE 2:
Pro eine Anregung, ich habe versucht, manuell die app öffnen.config-Datei, etwa so:
Dim exePath As String = System.IO.Path.Combine(Environment.CurrentDirectory, "ServiceName.exe")
Dim myConfig As Configuration = ConfigurationManager.OpenExeConfiguration(exePath)
So, hier ist der seltsame Teil, wenn ich von innen sehen, den Pfad korrekt ist (Punkte auf meine app.config), aber die connectionStrings sind immer noch geladen von der Maschine.config-Datei (meine connectionStrings sind nicht geladen)!! ARGH
UPDATE 3:
Okay, also habe ich es herausgefunden. Beim Verweis auf ein Projekt(Eltern) aus einem anderen Projekt(Kind), das Kind ' s app.config verwendet, auch wenn die übergeordneten Klassen verwendet werden. Also, ich kann die connectionStrings zu zeigen, wenn ich Sie über kopieren des Kindes-app.config. Wenn Sie versuchen, öffnen Sie es manuell, meine currentDirectory war das Kind, nicht die Eltern (seltsam, wie es nicht eine exception zu werfen - es würde nicht in der Lage gewesen zu finden, die config-Datei ... es werden nur im hintergrund benutzt die Maschine.config ... naja).
Vielen Dank an alle für die Hilfe!
- Mag eine dumme Frage sein, aber wie stellen Sie den service und seine app.config? Sie haben ein servicename.exe.config im richtigen Verzeichnis?
- Ich habe nicht bereitgestellt es noch ... ist alles noch im debugging-auf meinem lokalen Rechner. Wenn ich es bereitstellen, ich will sicher sein, dass die config-Datei landet im Ordner "System32" (glaube ich) oder was auch immer Ordner, in dem windows services suchen-Dateien standardmäßig.
- umgehen geschrieben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste, was Sie tun müssen, ist sicherzustellen, dass der service-account hat Zugriff auf die Datei (wenn nicht als SYSTEM ausgeführt wird). Es klingt wie es sein sollte, ok, aber da Sie erwähnen, Mein.Einstellungen.Einstellung funktioniert.
Andere Sache, zu suchen ist, um sicherzustellen, dass die app.config ist der name des service executable in es - also wenn die service exe ist MyService.exe die app.config muss den Namen MyService.exe.config.
Die Letzte Sache zu beachten: Bibliotheken liest die ausführbare Datei der app.config, der die Bibliothek lädt, nicht die app.config, das ist mit der Bibliothek. Also, wenn Sie haben ein Projekt für den service executable
MyService
und ein Projekt für die BibliothekMyServiceLibrary
den code in der Bibliothek Lesen Sie die app.config vonMyService
nichtMyServiceLibrary
.Sah ich einige Leute sagen, das problem könnte behoben werden, indem manuell wieder hinzufügen einer Referenz zu
System.Configuration.dll
SEITE HINWEIS: Wenn das echt ist Sie die ganze app.config-Datei und nicht nur ein Ausschnitt dann ist das Ihr problem... Sie sind app.config-Datei sollte VIEL mehr kompliziert oder .NET wird nicht in der Lage sein, um es zu laden.
Problemumgehung: Verwenden Sie den Konfigurations-manager zu öffnen, diese config-Datei (es gibt eine API für das.) Bekommen Sie es nicht zum laden von auto-magisch nur sagen, die config-manager zu öffnen.
Ich denke immer noch, das problem ist deine config-Datei ist ungültig -- könnten Sie bitte poste die VOLLSTÄNDIGE Datei?
Stellen Sie sicher, dass die config-Datei wird bereitgestellt, um den gleichen Ordner wie die ausführbare Datei, und es heißt Ihr.Montage.exe.config.
Ich hatte ein ähnliches problem, aber in meinem Fall war es, da hatte ich das Projekt geändert-namespace. Dies wird auch verwendet, um die Einstellungen der Anwendung section-element-Namen in der config-Datei, also der code war nicht die Suche nach einem neuen Namen für den Abschnitt ein. Das hantieren mit eine benutzerdefinierte Einstellung, die Werte, die in den Projekteigenschaften und den Wiederaufbau verursacht, die den neuen Abschnitt in der SCHRIFTLICHEN app.config neben der alten, die war, was indiziert das Problem für mich.