Nous avons plusieurs projets .NET dans lesquels nous stockons certains paramètres dans des fichiers de configuration.
Désormais, chaque développeur aura ses propres fichiers de configuration qui diffèrent un peu (différentes chaînes de connexion pour se connecter aux bases de données locales, différents points de terminaison WCF , etc.)
Pour le moment, nous avons tendance à extraire les fichiers app / web.config et à les modifier en fonction de nos besoins.
Cela conduit à de nombreux problèmes car de temps en temps, quelqu'un vérifie ses propres paramètres ou perd sa configuration personnalisée lors de l'obtention de la dernière version de TFS .
Comment gérez-vous des situations comme celle-ci? Ou n'avez-vous pas du tout ce problème?
Réponses:
Nous utilisons un système qui combine plusieurs des réponses existantes sur cette page, en plus de s'inspirer de cette suggestion de Scott Hanselman .
En bref, ce que nous avons fait, c'est d'avoir un app.config / web.config commun et d'avoir la plupart des paramètres spécifiques dans des fichiers individuels, comme suggéré par d'autres réponses ici. par exemple pour nos paramètres SMTP, l'app.config contient
Ce fichier est sous contrôle de code source. Cependant, les fichiers individuels, comme celui-ci, ne sont pas:
Ce n'est pas tout à fait là que l'histoire se termine. Qu'en est-il des nouveaux développeurs ou d'une nouvelle installation source? La majeure partie de la configuration n'est plus sous contrôle de code source et il est difficile de créer manuellement tous les fichiers .config dont ils ont besoin. Je préfère avoir des sources qui seront au moins compilées dès la sortie de la boîte.
Par conséquent, nous conservons une version des fichiers .config dans le contrôle de code source, nommée .config.default files. Un arbre source frais ressemble donc à ceci:
Pourtant, cela ne sert vraiment à rien pour le développeur, car pour Visual Studio, ce ne sont que des fichiers texte sans signification. Par conséquent, le fichier batch
copy_default_config.bat
,, se charge de créer un ensemble initial de fichiers .config à partir des fichiers .config.default:Le script peut être réexécuté en toute sécurité, en ce sens que les développeurs qui ont déjà leurs fichiers .config ne les verront pas écrasés. Par conséquent, il est possible d'exécuter ce fichier de commandes en tant qu'événement de pré-construction. Les valeurs des fichiers .default peuvent ne pas être exactement correctes pour une nouvelle installation, mais elles constituent un point de départ raisonnable.
En fin de compte, chaque développeur se retrouve avec un dossier de fichiers de configuration qui ressemble à ceci:
Cela peut sembler un peu compliqué, mais c'est certainement préférable aux tracas des développeurs qui se marchent sur les pieds.
la source
Dans votre Web.config, utilisez la source d'autres fichiers
Gardez le web.config dans le contrôle de version et ne le faites pas pour ConnectionStrings.config. Désormais, tous les développeurs ont un fichier pour la chaîne de connexion.
Vous pouvez le faire pour tous les paramètres qui dépendent du local.
la source
Voici une solution pour les fichiers web.config et Visual Studio 2010:
1) Modifiez manuellement le fichier .csproj de votre application Web pour ajouter une
AfterBuild
cible comme celle-ci:Cette cible transformera le fichier Web.config correspondant au développeur actuel connecté - d'où la
$(USERNAME)
variable -, avec le fichier correspondant créé en 1). Il remplacera le Web.config local uniquement si le contenu a changé (pour éviter le redémarrage) à chaque build, même si le Web.config local est contrôlé par la source, c'est pourquoi leOverwriteReadOnlyFiles
est défini sur True. Ce point est en fait discutable.2) Créez un fichier nommé
Web.[developer windows login].config
pour chaque développeur du projet. (par exemple, dans les captures d'écran suivantes, j'ai deux développeurs nommés smo et smo2):Ces fichiers (1 par développeur) peuvent / doivent être contrôlés par la source. Ils ne doivent pas être marqués comme dépendants du fichier Web.config principal car nous voulons pouvoir les extraire individuellement.
Chacun de ce fichier représente une transformation à appliquer au fichier Web.Config principal. La syntaxe de transformation est décrite ici: Syntaxe de transformation Web.config pour le déploiement de projet d'application Web . Nous réutilisons cette tâche de transformation de fichier Xml géniale qui est prête à l'emploi avec Visual Studio. Le but de cette tâche est de fusionner des éléments et des attributs XML au lieu d'écraser le fichier entier.
Par exemple, voici un exemple
web.[dev login].config
qui modifie une chaîne de connexion nommée «MyDB», quel que soit le reste du fichier Web.config:Or, cette solution n'est pas parfaite car:
Mais au moins, vous n'avez qu'à gérer un fichier web.config principal unique plus un fichier de transformation par développeur.
Une approche similaire pourrait être adoptée pour les fichiers App.config (et non Web), mais je n'ai pas développé davantage.
la source
web.default.config
quandweb.$(USERNAME).config
n'existe pas? Merci au passage pour cette excellente réponse.Nous utilisons machine.config pour éviter d'avoir des différences dans web.config entre les environnements.
la source
Pourquoi ne pas ignorer le fichier pour qu'il ne soit jamais archivé? J'ai rencontré un problème similaire et j'ai ajouté web.config à la liste des ignorés dans Subversion.
Dans TFS cependant, c'est un peu plus difficile, consultez cet article pour savoir comment le faire.
la source
Une façon de faire face est d'avoir un système tokenisé et d'utiliser un script rake pour changer les valeurs.
Une méthode plus rudimentaire pourrait être d'avoir un lien vers un fichier AppSettings.config pour tous les AppSettings dans votre web.config (similaire avec les connexions) ie
Ensuite, ayez un dossier avec chacun de vos développeurs avoir une version dans un sous-dossier (ie / _configs / dave /). Ensuite, lorsqu'un développeur travaille sur son propre code, il copie du sous-dossier à la racine du dossier lié.
Vous devrez vous assurer de communiquer les modifications apportées à ces fichiers (sauf si vous effectuez un jeton). Si vous gardez le fichier AppSettings.config hors du contrôle de code source et archivez uniquement les dossiers individuels des développeurs (tous), ils seront obligés de copier le bon.
Je préfère la tokenisation, mais cela peut être plus difficile à démarrer si cela est uniquement destiné à être une solution rapide.
la source
Ignorez les fichiers et disposez d'un Commom_Web.Config et Common_App.Config. Utilisation d'un serveur de build d'intégration continue avec des tâches de build qui renomme ces deux en noms normaux afin que le serveur de build puisse faire son travail.
la source
web.config
du dossier source est utilisée lors du débogage. Si vous, par exemple, ajoutéweb.config
à.gitignore
et non utilisateurs tenus de copierCommom_Web.Config
àweb.config
et de le modifier à leur fantaisie, vous faites partie du chemin. Mais ensuite, lorsque vous avez besoin d'éditer quelque chose qui est le même sur toutes les machines du développeur, comme lasystem.web/compilation
section ou le particulierappSettings
qui devrait être le même partout, ce schéma s'effondre.Nous avons le même problème et ce que nous faisons est
la source
En supposant que vous utilisez Visual Studio, pourquoi n'utilisez-vous pas différentes configurations de solution? Par exemple: vous pouvez avoir une configuration Debug qui utilise Web.config.debug et une configuration Release qui utilise Web.config.release. Web.config.debug devrait avoir quelque chose comme
avec le fichier Standard_Name_For_Config.config qui récupère tous les paramètres personnels du développeur, tandis que Web.config.release a toujours les paramètres de production. Vous pouvez stocker les configurations par défaut dans un dossier contrôlé par la source et faire en sorte qu'un nouvel utilisateur les prenne à partir de là.
la source