Frage

In einem .NET-Projekt, sagen wir, Sie haben eine Konfiguration, Einstellung - wie eine Verbindungszeichenfolge gespeichert werden, werden in einer app.config-Datei, die ist verschiedenen für jeden Entwickler im team (Sie verwenden möglicherweise einen lokalen SQL-Server oder spezifische server-Instanz oder mit einem remote-server, etc).

Wie kann man die Struktur der Lösung, so dass jeder Entwickler kann eigene Entwicklung "Einstellungen" (D. H.nicht in die Quellcodeverwaltung eingecheckt), bieten aber einen Standard-Verbindungszeichenfolge in die Quellcodeverwaltung eingecheckt (und damit die Versorgung der richtigen Standardwerte für einen build-Prozess oder neue Entwickler).


Edit:Kann die "file"Methode vorgeschlagen von @Jonathon irgendwie verwendet mit die connectionStrings Abschnitt?

War es hilfreich?

Lösung

AppSettings kann überschrieben werden, mit einer lokalen Datei:

<appSettings file="localoveride.config"/>

Dies ermöglicht es für jeden Entwickler, um Ihre eigene lokale Einstellungen.

Soweit die Verbindungszeichenfolge in einer perfekten Welt würden alle Entwickler müssen sich verbinden, um eine test DB, nicht ausführen, SQL Server.

Jedoch, ich fand es am besten, um eine Datei namens Web.Config.Prd-source-control und verwenden, für die build-Bereitstellungen.Wenn jemand ändert web.config, Sie müssen auch hinzufügen, die änderung der .PRD-Datei...Es ist keine gute Automatisierung gibt :(

Andere Tipps

Edit:Können die "Datei" - Methode vorgeschlagen von @Jonathon irgendwie verwendet mit die connectionStrings section?

Oder Sie können mehrere Verbindungszeichenfolgen in die checked-in der config-Datei, und verwenden Sie eine App-Taste, um zu bestimmen, welche ConnectionString verwendet werden.Ich habe Folgendes in meiner Codebasis für diesen Zweck:

public class ConnectionString
{
    public static string Default
    {
        get 
        { 
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"]))
                throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings");

            return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]);
        }
    }

    public static string GetByName(string dsn)
    {
        return ConfigurationManager.ConnectionStrings[dsn].ConnectionString;
    }
}

Ich mache immer Vorlagen für meine config-Dateien.

Als Beispiel verwende ich NAnt für den Bau meiner Projekte.Ich habe eine Datei eingecheckt lokale.Eigenschaften.xml.Vorlage.Meine NAnt-build-warnen die Entwickler, wenn local.properties.xml nicht vorhanden.Innerhalb dieser Datei werden die Arbeitsplatz-spezifische Einstellungen.Die Vorlage wird in die Quellcodeverwaltung eingecheckt, aber die eigentliche config nicht.

Ich verwende ganz archaische design, die einfach funktioniert.

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

Dann in meinem nant-Skript, ich habe eine Aufgabe, die Kopien der aktuellen build-Umgebung plus _ app.config und kopieren Sie es auf app.config.

Seine fiesen, aber Sie können nicht zwischen den Anbietern und den ConfigurationManager vorzutäuschen, um Sie, sagen Anbieter Blick auf "dev" oder "prod" Verbindungszeichenfolge und nur noch 3 benannte Verbindung strings.

nant-Aufgabe:

<target name="copyconfigs" depends="clean">
  <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
   <in>
     <items>
       <include name="**/${ConfigPrefix}App.config" />
       <include name="**/${ConfigPrefix}connectionstrings.config" />
       <include name="**/${ConfigPrefix}web.config" />
     </items>
   </in>
   <do>
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
   </do>
  </foreach></target>

Können die "Datei" - Methode vorgeschlagen von @Jonathon irgendwie verwendet, mit dem Abschnitt connectionStrings?

Nein, aber es gibt nichts stoppen Sie von der Speicherung der ConnectionString als AppSettings-Taste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top