Wir betreiben ein komplexes System, das in C # .NET 3.5 geschrieben ist und aus mehr als 20 Websites, mehr als 10 Windows-Diensten und verschiedenen geplanten Aufgaben und Hilfsanwendungen besteht.
Jede dieser Komponenten ist mit einer oder mehreren unserer Framework- und Business-Logik-DLLs gebündelt. Diese DLLs haben umfangreiche Konfigurationseinstellungen, und dies hat sich in einen Albtraum verwandelt, in dem wir mehr als 40 Konfigurationsdateien für mehrere Instanzen derselben Klassenbibliotheken verwalten.
Wir registrieren unsere DLLs aus verschiedenen Gründen nicht im GAC: 1) Uns gefällt die Flexibilität, Änderungen an ausgewählten Projekten schnell umzusetzen, ohne das gesamte System neu aufzubauen oder unnötige Ausfallzeiten zu verursachen. 2) Einige Instanzen der DLL erfordern etwas andere Konfigurationen; Zum Beispiel verwenden einige Projekte verschiedene Verbindungszeichenfolgen, Benachrichtigungs-E-Mail-Adressen und so weiter.
Wir haben mit den Attributen AppSettings file / configSource in Web.config / App.config experimentiert, aber diese funktionieren nur mit relativen Pfaden, nicht projektübergreifend. Wir haben uns überlegt, die Standardeinstellungen in machine.config zu speichern, aber dies ist eine Aufgabe, die zu unübersichtlich und voller wichtiger Dinge ist, die nichts mit unseren Projekten zu tun haben.
Unsere aktuelle "Lösung" besteht darin, unser eigenes Konfigurationsdateiformat zu verwenden, das zuerst nach einer Konfiguration im "bin" -Ordner des aktuellen Projekts sucht, und wenn diese nicht existiert, wird es von einem fest codierten zentralen Ort geladen. Auf diese Weise können wir die Einstellungen bei Bedarf überschreiben, verwenden jedoch die restliche Zeit die Standardeinstellungen.
Letztendlich möchten wir, dass jede Klassenbibliothek Standardeinstellungen an einem zentralen Ort hat und dass jede Instanz eine optionale Konfigurationsdatei haben kann, die nur die Einstellungen außer Kraft setzt, die sich von den Standardeinstellungen unterscheiden.
Gibt es eine empfohlene Industriestandardmethode zur Lösung dieses Problems in .NET?
Wenn das alles in der gleichen Firma ist, warum speichern Sie nicht einfach die Konfigurationen in der Datenbank? Ich glaube, das Enterprise Framework verfügt sogar über Adapter, die Sie anschließen können, um genau dies zu tun.
Ich weiß in unserer Firma, da wir Seiten hatten, die in webfarmen laufen, würden wir die Konfiguration in der DB speichern, wenn wir etwas ändern mussten, dann würde ein db-Skript die Konfiguration aktualisieren. keine Notwendigkeit, zu den Seiten zu schieben, musste nur die Website neu starten oder berühren Sie die web.config, um das Neuladen zu erzwingen.
Eine andere Lösung, die wir für andere Elemente hatten, war die Verwendung einer Datenbank, die Schlüsselwertpaare zusammen mit anderen Arten von Konfigurationsdaten enthielt, so dass wir auch die Projekte unserer Website / Windows Forms, die dieselben Komponenten verwendeten, problemlos ändern konnten. p>
Also ich denke, was ich sage ist, wenn sie alle innerhalb der gleichen Firma / Einflussbereich sind, so dass Sie eine Datenbank verwenden könnten, die für sie alle einfach die DB verwenden.
Die Registrierung nicht polulieren.
Ich würde OpenExeConfiguration ( Ссылка ) verwenden und jede app / dll zwei Configs öffnen lassen, Die erste wäre die Standardeinstellungen, die zweite die Überschreibungen.
Sie können die Standardeinstellungen an diesem "zentralen" Speicherort beibehalten, indem Sie allen Ihren Apps Lesezugriff gewähren und sich die lokalen Konfigurationen in der Nähe Ihrer Apps befinden.
Wie haben Sie diese Websites und Anwendungen bereitgestellt, wurden diese Module in Ihrem System auf demselben Computer ausgeführt, und haben diese Module die DLLs aus einem bestimmten Verzeichnis aufgerufen?
Wenn Sie in der gleichen Maschine die Konfigurationsdatei verwenden könnten, wenn Sie in einer Server-Farm eine Datenbank benötigen, wie es Joshua zuvor erwähnt hat.
Wenn Sie nur einen Konfigurationsabschnitt in eine allgemeine Konfigurationsdatei überschreiben möchten, können Sie zuerst die Standardwerte von der zentralen Position laden und Ihre spezifische Konfiguration in jedes Projekt laden und dann das Konfigurationsobjekt in der Laufzeitumgebung ändern.
Tags und Links configuration .net c#