La gestion web.config pour les équipes en VS2010 & TFS

avec le mandat de VS2010 que web.config être inclus dans le projet, Comment Pouvons-nous permettre à chacun de garder son propre fichier de configuration personnalisé sans entrer dans des problèmes de contrôle des sources?

auparavant, nous quitterions simplement web.config out de notre projet, permettant à chacun de garder sa propre version locale du web.config sur leur machine. Nous avons déménagé à VS2010, et il me force maintenant à ajouter web.config à mon projet afin d'exécuter le mode de débogage. Parce que notre projet est lié pour FO, il ajoute automatiquement web.la configuration de la source de contrôle et tente de le maintenir de cette façon.

est-il possible d'exécuter en mode debug sans inclure web.config dans votre projet? Ou est-il une meilleure façon de gérer les fichiers de configuration?

20
demandé sur skaffman 2010-05-28 23:55:54

5 réponses

j'espère que cela aidera quelqu'un. J'utilise cette méthodologie depuis quelques mois maintenant. C'est vraiment facile à faire. J'utilise VS 2010 avec TFS 2010. Décomposons:

  • tous les fichiers de configuration web sont maintenant "DependentOn" le " web.config "
  • chaque développeur ou équipe a besoin de son propre "[utilisateur/équipe].Débogage.config "
  • Les fichiers de configuration
  • devraient être transformés indépendamment du fait que nous" publions " en mode de publication ou non.

Voici comment on fait:

  1. cliquez avec le bouton droit de la souris sur le projet Web auquel vous voulez accéder et choisissez" Unload Project "(et non"Remove Project").

  2. cliquez à nouveau avec le bouton droit de la souris sur le même projet Web (doit être grisé maintenant) et choisissez" Modifier ...csproj". Ceci ouvrira le projet dans un éditeur Xml.

  3. Faites défiler jusqu'à ce que vous trouviez section qui a tout le " Web.config" annonces. Maintenant, commentez tous les éléments" DependentUpon " dans le Xml.

  4. fermez L'éditeur Xml et sauvegardez vos modifications. Ensuite, cliquez-droit sur votre projet et sélectionnez "Recharger". Lorsque le projet se recharge, vous remarquerez que le Web.configs ne "stack" Plus sous le "Web.config". C'est nécessaire pour "tromper" TFS.

  5. maintenant, Copiez le" Web.config" fichier, collez-la dans le même projet et le renommer en "Web.base.config". Cela va être utilisé pour re-générer le Web.config à chaque fois (loin).

  6. Maintenant, sélectionnez le Web.fichier de configuration et aller à " Fichier --> contrôle des sources --> exclure Web.configuration de la Source de Contrôle". De plus, ouvrez L'Explorateur de contrôle Source (vue de L'Explorateur TFS) et trouvez l'emplacement de votre site web.config est et supprimez-le de TFS. C'est fait parce que le Web.config obtiendrez re-généré à chaque fois que vous générez le projet (que je vais couvrir prochaine).

  7. maintenant, nous allons créer un nouveau fichier de construction qui nous aidera à régénérer le Web.config pour tout type construit, même ceux de débogage (ce qui est ce que le Web.config Transformed manquait au départ). Créez un nouveau fichier Xml dans votre projet et renommez-le en "[votre projet].wpp.cible." Il est important de nommer ceci exactement ce que votre projet est appelé y compris tous les points, les tirets, etc (ex. Mon.Projet.wpp.cible.)

  8. maintenant, entrez le Xml suivant dans le nouveau fichier. Ne vous inquiétez pas s'il commence à souligner des erreurs de syntaxe:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <UsingTask TaskName="TransformXml"
                   AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
    
        <!-- Make sure web.config will be there even for package/publish -->
        <Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild">
            <Copy SourceFiles="Web.base.config"
                  DestinationFiles="Web.config"
                  OverwriteReadOnlyFiles="true"
                  SkipUnchangedFiles="false" />
        </Target>
    
        <Target Name="CustomTarget" BeforeTargets="BeforeBuild">
            <Message Text="Transforming: Web.$(Configuration).config" Importance="high" />
            <TransformXml Source="Web.base.config"
                          Transform="Web.$(Configuration).config"
                          Destination="Web.config" />
        </Target>
    </Project>
    
  9. maintenant, à partir de ce point, vous ne jamais, jamais éditer le Web.config, il sera écrasé à chaque fois que l'application compile. Vous éditez seulement le " Web.base.config".

  10. maintenant, faisons en sorte que le projet ressemble à il était. Cliquez à nouveau sur le bouton droit de la souris et "déchargez" le projet. Maintenant, cliquez à nouveau sur le bouton droit de la souris et" éditez". Maintenant, retournez en arrière et annulez tous les éléments que nous avons commentés à L'Étape #3. De plus, vous devez ajouter L'élément "DependentOn" sous le "Web.base.config " element pour qu'il apparaisse sous le "Web.config". Fermez et sauvegardez - le, puis rechargez votre projet à nouveau. Vous devriez noter que toutes les configs sont maintenant sous le "Web.config" de nouveau.

  11. At ce point, vous pouvez ajouter autant de Configurations à votre projet / Solution que vous le souhaitez. Par exemple, j'ai ajouté une config de construction appelée "Tim (Debug)", mais la config de projet est appelée "Tim.Débogage." Quand je fais un clic droit sur le " Web.config" et choisissez "Ajouter Config se Transforme", il ajoute maintenant mon "Web.Tim.Débogage.config de fichier". Vous pouvez également ajouter des configs par l'environnement ou par équipe.


il est intéressant de noter que votre configuration individuelle les fichiers ne sont qu'un sous-ensemble du "Web.base.config" et ils seront "transformés" lors de n'importe quel processus de construction. Pour changer quelle transformation va être construite pendant le débogage, allez simplement au sommet de votre solution et choisissez la configuration de construction que vous voulez. Tant que vous avez un site web.config pour que les Construire de Config, il transformera. Sinon, tu auras le "Web".base.config" à la place.

NOTE: cela devrait également fonctionner avec les applications Windows/WPF standard ainsi qu'en utilisant l '" application.config" plutôt.

32
répondu Tim 2012-06-21 14:19:39

Je n'ai pas vu une bonne réponse pour la gestion de différents web.fichiers de configuration par développeur avec TFS à ce jour.

cependant si les problèmes qui causent aux développeurs d'exiger web différent.les fichiers de configuration sont traités à la place, ce qui donne généralement de meilleurs résultats quel que soit le système de contrôle de version choisi.

par exemple, moins de différences entre les environnements de développement réduira les travaux sur les arguments de ma Machine (WOM) et souvent aussi réduire les changements de configuration pour les environnements au-delà du développement (par exemple, Test, Production), ce qui simplifie le déploiement et réduit les bugs spécifiques à l'environnement et à la configuration.

selon la nature de l'élément de configuration, il existe habituellement plusieurs stratégies différentes pour atténuer les différences par Environnement. Beaucoup de ce que je soupçonne ont déjà des réponses sur le débordement de la pile.

3
répondu Jason Stangroome 2010-09-22 14:18:39

Jarrett,

Tout ce que j'ai c'est une anecdote sur la façon dont nous gérons la situation.

nous avons une équipe de 4 programmeurs.

nous utilisons une solution de contrôle à la source à L'extérieur de VS -- TortoiseSVN. Nous avons chacun notre propre site web local.config qui est inclus dans le projet. Le dossier de projet est inclus dans le dépôt, mais nous avons le web.config défini au statut" Ignore on commit".

Je ne sais pas ce que le contrôle du code source que vous utilisez, mais subversion avec Tortoise SVN (qui fonctionne en dehors de Visual Studio) a très bien fonctionné pour notre petite équipe. La plupart d'entre nous programment sur deux machines distinctes... un au bureau, à la maison.. donc quand vous associez cela avec le fait que nous avons deux serveurs de production, nous sommes confortablement face à 10 web.config par projet.

cela dit, vous devez vous rappeler d'apporter le web d'un autre développeur.fichier de configuration lorsque vous créer un nouveau ordinateur de développement, sinon la solution ne se chargera pas correctement, ou configurer un web par défaut.config qui ne contient pas les chaînes de connexion et paramètres de l'application.

et une dernière remarque: nous utilisons IIS 7 pour déboguer

1
répondu Brian Webster 2010-05-30 03:49:24

a donc une bonne réponse pour ce ici .. Je n'ai pas vérifié le web plusieurs.configs in VS2010 mais je me demande si cela a été ajouté à cause des changements qu'ils ont apportés au web.conig..

1
répondu itchi 2017-05-23 11:58:46

j'ai utilisé des modèles T4 pour résoudre ce problème. Au lieu d'avoir un site web.config, vous avez une toile.tt qui génère un web.config. Sur le web.TT fichier vous pouvez générer du code différent basé sur le nom de machine ou l'utilisateur courant.

1
répondu Ewald Hofman 2010-09-11 12:42:08