2010-05-13 7 views
8

Ok, ich weiß, das könnte ein Designproblem sein, also würde ich gerne auch Bemerkungen dazu haben.Wie kann ich Konfigurationseinstellungen für mehrere Projekte in Visual Studio freigeben?

Ich habe eine Visual Studio Web-Anwendungslösung. Ich habe drei Projekte als UserInterface, BusinessLogic und DataAccess.

Ich musste einige benutzerdefinierte Einstellungen speichern und ich habe ConfigSections in der Konfigurationsdatei erstellt.

Ich greife auf diese configSections durch Klassen, die von .NET ConfigurationSection Basisklasse erben.

Also kurz für jedes Projekt hatte ich eine separate configSection und für die entsprechende configSection hatte ich eine Klasse in diesem Projekt von ConfigurationSection erben, um auf die Einstellungen der Konfig-Sektion zuzugreifen.

Das funktioniert alles süß. Das Problem tritt jedoch auf, wenn eine Einstellung vorhanden ist, die ich für mehrere Projekte verwenden muss. Wenn ich also eine Einstellung verwenden muss, die im UserInterface-Projekt configSection definiert ist, sagen wir im BusinessLogic-Projekt, muss ich eine Kopie dieser Einstellung in der configSection von BusinessLogic erstellen. Dies führt dazu, dass die gleiche Einstellung über mehrere configSections kopiert wird.

Ist das nicht ein bisschen zu redundant?

Antwort

3

Put gemeinsame Konfigurationseinstellungen in einer separaten Datei und verwenden diese Technik: http://blogs.msdn.com/jjameson/archive/2009/04/02/linked-files-in-visual-studio-solutions.aspx

+0

Müssen Sie diesen Link behalten, beschreibt verknüpfte Dateien sehr gut. – Will

+0

Hmm. Ist es nicht so sehr wie ein "gemeinsames" Projekt zu erstellen und die gemeinsamen Einstellungen darin zu machen. Und dann könnte der Rest der Projekte auf diesen Common zugreifen? – neebz

0

Ihr Beispiel verwenden:

Gerade die Einstellung im Projekt Business Logic erstellen und dann einen Getter in die Bedienoberfläche Projekt aussetzen .

Dann kann die Benutzeroberfläche die BL für den Wert abfragen. Ihre Konfigurationseinstellung ist nur an einer Stelle - auf der niedrigsten Stufe.

Wenn Sie jedoch ein untergeordnetes Projekt durch ein neues Projekt ersetzen, müssen Sie sicherstellen, dass die Einstellung auch repliziert wird. Dies ist wahrscheinlich nur dann ein Problem, wenn sich die Einstellung in der Datenzugriffsebene befindet, da diese am wahrscheinlichsten geändert wird (z. B. ein anderer Datenbankanbieter).

1

Nie dies tatsächlich getan, aber in der Theorie könnte es funktionieren ...

Wenn Sie Ihre benutzerdefinierten Konfigurationsabschnitt definieren, legen Sie die configSource in eine externe Datei (whatever.config). Diese externe Datei sollte der LÖSUNG und nicht dem Projekt hinzugefügt werden. Es erscheint unter "Lösungselemente". In jedem Projekt, Add a Existing File (Vorhandene Datei hinzufügen), blättern Sie zu whatever.config, klicken Sie auf das Dropdown-Menü auf der Hinzufügen-Schaltfläche und wählen Sie "Als Link hinzufügen".

Whatever.config ist eine einzelne Datei, die Sie unter Lösungselemente bearbeiten können. Sie wird zur Kompilierungszeit in jede Anwendung kopiert.

+0

Ja, ich dachte in die gleiche Richtung. Das einzige Problem, das ich habe, ist, dass ich die Handler-Klasse (die die Informationen aus whatever.config analysiert) auch als Lösung haben möchte.damit die config + ihr Parser nur einmal existieren und in mehrere Projekte eingebunden werden. Obwohl das Problem nicht ist, wird Visual Studio eine Klasse kompilieren, die auf Solution Item Ebene ist? Ich habe es nicht geschafft. – neebz

0

Es gibt eine viel bessere Möglichkeit, dies zu tun mit "Shared Projects" siehe meine Antwort auf eine very similar question here.

Verwandte Themen