Question

Dans une .NET de projet, disons que vous avez un paramètre de configuration - comme une chaîne de connexion stockées dans une application.fichier de configuration, qui est différent pour chaque développeur de votre équipe (ils ont peut-être l'aide d'un Serveur SQL local, ou une instance de serveur spécifique, ou à l'aide d'un serveur à distance, etc).

Comment pouvez-vous la structure de votre solution, de sorte que chaque développeur peut avoir leur propre développement "préférences" (c'est à direpas vérifié dans le contrôle de code source), mais de fournir une chaîne de connexion par défaut qui est vérifié dans le contrôle de code source (ce qui permet de fournir la bonne paramètres par défaut pour un processus de construction ou de nouveaux développeurs).


Edit:"Lafile"méthode proposée par @Jonathon quelque peu être utilisé avec le connectionStrings section?

Était-ce utile?

La solution

AppSettings peut être remplacé par un fichier local:

<appSettings file="localoveride.config"/>

Cela permet à chaque développeur de garder leurs propres paramètres locaux.

Aussi loin que la chaîne de connexion, dans un monde parfait, tous les développeurs devraient se connecter à un test de DB, de ne pas exécuter SQL Server chacun.

Cependant, j'ai trouvé qu'il est préférable de garder un fichier nommé Web.Config.Prd dans le contrôle de source, et l'utiliser pour construire des déploiements.Si quelqu'un modifie le web.config, ils doivent également ajouter la modification de l' .DRAP de fichier...Il n'y a pas de bons automatismes là :(

Autres conseils

Edit:La "fichier" méthode suggérée par @Jonathon quelque peu être utilisé avec le section connectionStrings?

Ou vous pouvez avoir plusieurs chaînes de connexion dans le activée dans le fichier de configuration, et d'utiliser une AppSettings clé pour déterminer qui ConnectionString doit être utilisé.J'ai la suite dans ma base de code à cet effet:

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;
    }
}

Je fais toujours des modèles pour mes fichiers de config.

Comme un exemple, j'utilise NAnt pour la réalisation de mes projets.J'ai extrait un fichier en local appelé.les propriétés.xml.de modèle.Mon NAnt construire avertir le développeur si local.properties.xml il n'existe pas.L'intérieur de ce fichier sera poste de travail des paramètres spécifiques.Le modèle sera vérifié dans le contrôle de code source, mais la config ne sera pas.

J'utilise assez archaïque conception qui fonctionne, tout simplement.

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

Ensuite dans mon nant script, j'ai une tâche de copie, la version actuelle de l'environnement de plus _ app.config et copiez-app.config.

Son méchant, mais vous ne pouvez pas obtenir dans entre les fournisseurs et les ConfigurationManager à l'usurpation, en disant fournisseurs de regarder les "dev" ou "prod" chaîne de connexion et seulement 3 appelé les chaînes de connexion.

nant de la tâche:

<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>

La "fichier" méthode proposée par @Jonathon être en quelque sorte utilisé avec la section connectionStrings?

Non, mais il n'y a rien qui vous empêche de stocker le ConnectionString un AppSettings clé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top