Ich entwickle eine Datenzugriffskomponente, die auf einer Website verwendet wird, die eine Mischung aus klassischen ASP- und ASP.NET-Seiten enthält, und eine gute Möglichkeit zum Verwalten der Konfigurationseinstellungen benötigt.
Ich möchte eine benutzerdefinierte Version verwenden ConfigurationSection
, und für die ASP.NET-Seiten funktioniert dies hervorragend. Wenn die Komponente jedoch über COM-Interop von einer klassischen ASP-Seite aufgerufen wird, wird sie nicht im Kontext einer ASP.NET-Anforderung ausgeführt und kennt daher web.config nicht.
Gibt es eine Möglichkeit, ConfigurationManager
die Konfiguration nur von einem beliebigen Pfad zu laden (z. B. ..\web.config
wenn sich meine Assembly im /bin
Ordner befindet)? Wenn es dann denke ich meine Komponente kann , wenn der Standard das zurückgreifen ConfigurationManager.GetSection
kehrt null
für meinen benutzerdefinierten Abschnitt.
Alle anderen Ansätze hierfür wären willkommen!
quelle
Antworten:
Versuche dies:
quelle
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/web.config");
Eine andere Lösung besteht darin, den Standardpfad der Umgebungskonfigurationsdatei zu überschreiben.
Ich finde es die beste Lösung für das Laden von Konfigurationsdateien mit nicht trivialen Pfaden, insbesondere die beste Möglichkeit, Konfigurationsdateien an DLL anzuhängen.
Beispiel:
Weitere Details finden Sie in diesem Blog .
Darüber hinaus bietet diese andere Antwort eine hervorragende Lösung mit Code zum Aktualisieren der App-Konfiguration und einem
IDisposable
Objekt zum Zurücksetzen auf den ursprünglichen Zustand. Mit dieser Lösung können Sie den Umfang der temporären App-Konfiguration beibehalten:quelle
Die Antwort von Ishmaeel funktioniert im Allgemeinen, ich habe jedoch ein Problem festgestellt: Die Verwendung
OpenMappedMachineConfiguration
scheint Ihre geerbten Abschnittsgruppen von machine.config zu verlieren. Dies bedeutet, dass Sie auf Ihre eigenen benutzerdefinierten Abschnitte zugreifen können (was alles ist, was das OP wünscht), jedoch nicht auf die normalen Systemabschnitte. Zum Beispiel funktioniert dieser Code nicht:Wenn Sie eine Uhr auf die stellen
configuration.SectionGroups
, werden Sie feststellen, dass system.net nicht als SectionGroup registriert ist und daher über die normalen Kanäle so gut wie nicht zugänglich ist.Es gibt zwei Möglichkeiten, dies zu umgehen. Die erste, die mir nicht gefällt, besteht darin, die Systemabschnittsgruppen erneut zu implementieren, indem Sie sie aus machine.config in Ihre eigene web.config kopieren, z
Ich bin nicht sicher, ob die Webanwendung selbst danach korrekt ausgeführt wird, aber Sie können korrekt auf die sectionGroups zugreifen.
Die zweite Lösung besteht stattdessen darin, Ihre web.config als EXE-Konfiguration zu öffnen, die wahrscheinlich ohnehin näher an der beabsichtigten Funktion liegt:
Ich gehe davon aus, dass keine der hier gegebenen Antworten, weder meine noch die von Ishmaeel, diese Funktionen so verwenden, wie es die .NET-Designer beabsichtigt haben. Aber das scheint für mich zu funktionieren.
quelle
Zusätzlich zu Ishmaeels Antwort gibt die Methode
OpenMappedMachineConfiguration()
immer einConfiguration
Objekt zurück. Um zu überprüfen, ob es geladen wurde, sollten Sie dieHasFile
Eigenschaft überprüfen, bei der true bedeutet, dass es aus einer Datei stammt.quelle
Die akzeptierte Antwort ist falsch !!
Beim Zugriff auf die AppSettings-Eigenschaft wird die folgende Ausnahme ausgelöst:
Hier ist die richtige Lösung:
quelle
Ich habe die Konfigurationswerte für Word Hosted .nET Compoent wie folgt bereitgestellt.
Eine .NET-Klassenbibliothekskomponente, die in MS Word aufgerufen / gehostet wird. Um meiner Komponente Konfigurationswerte bereitzustellen, habe ich winword.exe.config im Ordner C: \ Programme \ Microsoft Office \ OFFICE11 erstellt. Sie sollten in der Lage sein, Konfigurationswerte wie in herkömmlichem .NET zu lesen.
quelle
Verwenden Sie für ASP.NET WebConfigurationManager:
quelle
Verwenden Sie die XML-Verarbeitung:
quelle
Dies sollte den Trick tun:
Quelle: https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files
quelle