Wir haben mehrere .NET-Projekte, in denen wir bestimmte Einstellungen in Konfigurationsdateien speichern.
Jetzt hat jeder Entwickler seine eigenen Konfigurationsdateien, die sich geringfügig unterscheiden (unterschiedliche Verbindungszeichenfolgen für die Verbindung zu lokalen Datenbanken, unterschiedliche WCF- Endpunkte usw.).
Im Moment neigen wir dazu, app / web.config-Dateien auszuchecken und sie an unsere Bedürfnisse anzupassen.
Dies führt zu vielen Problemen, da von Zeit zu Zeit jemand seine eigenen Einstellungen überprüft oder die benutzerdefinierte Konfiguration verliert, wenn er die neueste Version von TFS erhält .
Wie gehen Sie mit solchen Situationen um? Oder haben Sie dieses Problem überhaupt nicht?
Antworten:
Wir verwenden ein System, das mehrere der auf dieser Seite vorhandenen Antworten kombiniert und auf diesen Vorschlag von Scott Hanselman zurückgreift .
Kurz gesagt, wir haben eine gemeinsame app.config / web.config und die meisten spezifischen Einstellungen in einzelnen Dateien, wie in anderen Antworten hier vorgeschlagen. zB für unsere SMTP-Einstellungen enthält die app.config
Diese Datei befindet sich in der Quellcodeverwaltung. Die einzelnen Dateien sind jedoch nicht wie folgt:
Hier endet die Geschichte allerdings nicht ganz. Was ist mit neuen Entwicklern oder einer neuen Quellinstallation? Der Großteil der Konfiguration befindet sich nicht mehr in der Quellcodeverwaltung, und es ist schwierig, alle benötigten .config-Dateien manuell zu erstellen. Ich bevorzuge eine Quelle, die zumindest sofort kompiliert werden kann.
Aus diesem Grund behalten wir eine Version der .config-Dateien in der Quellcodeverwaltung mit dem Namen .config.default- Dateien. Ein frischer Quellbaum sieht also so aus:
Für den Entwickler jedoch nicht wirklich von Nutzen, da sie für Visual Studio nur bedeutungslose Textdateien sind. Daher
copy_default_config.bat
kümmert sich die Batch-Datei darum, einen ersten Satz von .config-Dateien aus den .config.default-Dateien zu erstellen:Das Skript kann sicher erneut ausgeführt werden, da Entwickler, die bereits über ihre .config-Dateien verfügen, diese nicht überschreiben lassen. Daher könnte man diese Batch-Datei möglicherweise als Pre-Build-Ereignis ausführen. Die Werte in den Standarddateien sind für eine Neuinstallation möglicherweise nicht genau korrekt, aber sie sind ein vernünftiger Ausgangspunkt.
Letztendlich hat jeder Entwickler einen Ordner mit Konfigurationsdateien, der ungefähr so aussieht:
Es mag ein wenig verworren erscheinen, aber es ist definitiv dem Ärger der Entwickler vorzuziehen, die sich gegenseitig auf die Zehen treten.
quelle
Verwenden Sie in Ihrer Web.config die Quelle aus anderen Dateien
Behalten Sie die web.config in der Versionskontrolle und tun Sie dies nicht für ConnectionStrings.config. Jetzt haben alle Entwickler eine Datei für die Verbindungszeichenfolge.
Sie können dies für alle Einstellungen tun, die lokal abhängig sind.
quelle
Hier eine Lösung für web.config-Dateien und Visual Studio 2010:
1) Bearbeiten Sie die .csproj-Datei Ihrer Webanwendung manuell, um ein
AfterBuild
Ziel wie das folgende hinzuzufügen :Dieses Ziel transformiert die Datei Web.config, die dem aktuell angemeldeten Entwickler entspricht - daher die
$(USERNAME)
Variable -, wobei die entsprechende Datei in 1) erstellt wird. Die lokale Web.config wird nur dann ersetzt, wenn sich der Inhalt bei jedem Build geändert hat (um einen Neustart zu vermeiden), auch wenn die lokale Web.config quellengesteuert ist. Aus diesem Grund ist dieOverwriteReadOnlyFiles
Einstellung auf True gesetzt. Dieser Punkt ist in der Tat fraglich.2) Erstellen Sie eine Datei mit dem Namen
Web.[developer windows login].config
für jeden Entwickler im Projekt. (In den folgenden Screenshots habe ich beispielsweise zwei Entwickler namens smo und smo2):Diese Dateien (1 pro Entwickler) können / sollten quellengesteuert sein. Sie sollten nicht als abhängig von der Haupt-Web.config markiert werden, da wir sie einzeln auschecken möchten.
Jede dieser Dateien stellt eine Transformation dar, die auf die Hauptdatei Web.Config angewendet werden soll. Die Transformationssyntax wird hier beschrieben: Web.config-Transformationssyntax für die Bereitstellung von Webanwendungsprojekten . Wir verwenden diese coole XML-Dateitransformationsaufgabe, die mit Visual Studio ausgeliefert wird. Der Zweck dieser Aufgabe ist merge XML - Elemente und Attribute , anstatt die gesamte Datei zu überschreiben.
Hier ist beispielsweise ein Beispiel
web.[dev login].config
, das eine Verbindungszeichenfolge mit dem Namen "MyDB" unabhängig vom Rest der Datei "Web.config" ändert:Diese Lösung ist nicht perfekt, weil:
Zumindest müssen Sie jedoch nur eine eindeutige web.config-Hauptdatei sowie eine Transformationsdatei pro Entwickler verwalten.
Ein ähnlicher Ansatz könnte für App.config-Dateien (nicht für Webdateien) gewählt werden, aber ich habe nicht weiter darauf eingegangen.
quelle
web.default.config
Wann zu verwenden,web.$(USERNAME).config
das nicht existiert? Vielen Dank übrigens für diese tolle Antwort.Wir verwenden machine.config, um Unterschiede in web.config zwischen den Umgebungen zu vermeiden.
quelle
Wie wäre es, wenn Sie die Datei ignorieren, damit sie nie eingecheckt wird? Ich bin auf ein ähnliches Problem gestoßen und habe der Ignorierliste in Subversion web.config hinzugefügt.
In TFS ist es allerdings etwas schwieriger. In diesem Beitrag erfahren Sie, wie es geht.
quelle
Eine Möglichkeit, dies zu bewältigen, besteht darin, ein System mit Token zu haben und die Werte mithilfe eines Rake-Skripts zu ändern.
Eine rudimentärere Methode könnte darin bestehen, einen Link zu einer AppSettings.config-Datei für alle AppSettings in Ihrer web.config zu haben (ähnlich wie bei Verbindungen), d. H.
Lassen Sie dann einen Ordner mit jedem Ihrer Entwickler eine Version in einem Unterordner haben (dh / _configs / dave /). Wenn ein Entwickler an seinem eigenen Code arbeitet, kopiert er ihn aus dem Unterordner in das Stammverzeichnis des verknüpften Ordners.
Sie müssen sicherstellen, dass Sie Änderungen an diesen Dateien mitteilen (es sei denn, Sie tokenisieren). Wenn Sie die Datei AppSettings.config außerhalb der Quellcodeverwaltung halten und nur die einzelnen Entwicklerordner (alle) einchecken, müssen diese den richtigen kopieren.
Ich bevorzuge die Tokenisierung, kann aber schwieriger in Betrieb zu nehmen sein, wenn dies nur eine schnelle Lösung sein soll.
quelle
Ignorieren Sie die Dateien und haben Sie eine Commom_Web.Config und eine Common_App.Config. Verwenden eines Build-Servers mit kontinuierlicher Integration mit Build-Tasks, die diese beiden in normale Namen umbenennen, damit der Build-Server seine Arbeit erledigen kann.
quelle
web.config
im Quellordner wird beim Debuggen verwendet. Wenn Sie beispielsweise hinzugefügtweb.config
zu.gitignore
und entweder Benutzer kopieren erforderlichCommom_Web.Config
zuweb.config
und bearbeiten sie ihre Phantasie, Sie ist Teil des Weges dorthin. Wenn Sie jedoch etwas bearbeiten müssen, das auf allen Computern des Entwicklers gleich ist, z. B. densystem.web/compilation
Abschnitt oder einen bestimmten AbschnittappSettings
, der überall gleich sein sollte, fällt dieses Schema auseinander.Wir haben das gleiche Problem und was wir tun, ist
quelle
Angenommen, Sie verwenden Visual Studio, warum verwenden Sie nicht unterschiedliche Lösungskonfigurationen? Beispiel: Sie können eine Debug-Konfiguration haben, die Web.config.debug verwendet, und eine Release-Konfiguration, die Web.config.release verwendet. Web.config.debug sollte so etwas wie haben
mit der Datei Standard_Name_For_Config.config, die alle persönlichen Entwicklereinstellungen enthält, während die Version Web.config.release immer die Produktionseinstellungen enthält. Sie können Standardkonfigurationen in einem quellengesteuerten Ordner speichern und von einem neuen Benutzer von dort übernehmen lassen.
quelle