159 votes

Utiliser la transformation de web.config de Visual Studio pour le débogage

Double Possible:
Comment puis-je utiliser le Web.debug.config de construction dans la débogueur visual studio serveur?

Je veux utiliser le web.config transformation qui fonctionne très bien pour les publier également à des fins de débogage.

Lorsque je publie une application web, visual studio transforme automatiquement le web.config basé sur mon currenc de configuration de la compilation. Comment puis-je indiquer à visual studio pour faire la même chose quand j'ai démarrer le débogage. Sur le débogage de commencer, il vous suffit d'utiliser le site web par défaut.config sans transformation.

Une idée?

97voto

OK, avec la compréhension que le web.debug.config & web.la libération.config sont en pour les colis/publier uniquement. Je suis venu avec une façon de permettre à ce que vous essayez de faire. J'ai blogué à ce sujet à http://sedodream.com/2010/10/21/ASPNETWebProjectsWebdebugconfigWebreleaseconfig.aspx. Voici le résumé.

Ne voyons comment nous pouvons nous permettre ce que la question demandeur veut faire. Pour résumer, quand il s'appuie sur une configuration particulière, il veut une transformation spécifique pour être appliquées sur le web.config. Alors, évidemment, vous ne voulez pas maintenir un site web.fichier de config, parce qu'il va être écrasé. Donc, ce que nous devons faire est de créer un nouveau fichier web.de modèle.config, qui est juste une copie de web.config. Ensuite, il suffit de supprimer web.config à l'aide de l'Explorateur Windows (ne pas supprimer à l'aide de Visual Studio car nous ne voulons pas de supprimer du projet). Remarque: Si vous utilisez une source de contrôle du fournisseur, qui est intégré dans Visual Studio, alors vous voudrez probablement pour supprimer web.configuration de la source de contrôle. Aussi, avec ce que nous ne voulons pas utiliser le web.debug.config ou web.la libération.config car ces ont déjà un rôle bien défini dans la Publication Web Pipeline si nous ne voulons pas les perturber. Donc, au lieu de cela, nous allons créer deux nouveaux fichiers dans le même dossier que le projet et le web.de modèle.config, web.dev.debug.config et web.dev.la libération.config. L'idée est que ce seront les transformations appliquées lorsque vous déboguez, ou exécuter votre application à partir de Visual Studio. Maintenant, nous avons besoin de raccordement dans la construction/package/publier des processus pour obtenir ce tous filaire. Avec des Projets d'Application Web (WAP) il y a un point d'extensibilité que vous pouvez créer un fichier de projet dans le même dossier avec le nom {ProjectName}.wpp.cibles où {ProjectName} est le nom du projet. Si ce fichier est sur le disque dans le même dossier que le WAP alors il sera automatiquement importé dans le fichier de projet. J'ai donc créé ce fichier. Et j'ai placé le contenu suivant:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- Make sure web.config will be there even for package/publish -->
  <Target Name="CopyWebTemplateConfig" BeforeTargets="Build">
    <Copy SourceFiles="web.template.config"
          DestinationFiles="web.config"/>
  </Target>

  <PropertyGroup>
    <PrepareForRunDependsOn>
      $(PrepareForRunDependsOn);
      UpdateWebConfigBeforeRun;
    </PrepareForRunDependsOn>
  </PropertyGroup>

  <!-- This target will run right before you run your app in Visual Studio -->
  <Target Name="UpdateWebConfigBeforeRun">
    <Message Text="Configuration: $(Configuration): web.dev.$(Configuration).config"/>
    <TransformXml Source="web.template.config"
              Transform="web.dev.$(Configuration).config"
              Destination="web.config" />
  </Target>

  <!-- Exclude the config template files from the created package -->
  <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage">
    <ItemGroup>
      <ExcludeFromPackageFiles Include="web.template.config;web.dev.*.config"/>
    </ItemGroup>
    <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/>
  </Target>
</Project>

Laissez-moi vous expliquer un peu tout ça. J'ai créé la CopyWebTemplateConfig cible qui sera toujours de copie de site web.de modèle.config pour le web.config à construire, même si vous n'êtes pas le débogage de votre application dans Visual Studio. Cela est nécessaire parce que nous avons encore besoin de soutenir le processus de publication de Visual Studio. Puis j'ai étendu la propriété PrepareForRunDependsOn pour inclure le UpdateWebConfigBeforeRun cible. Cette propriété est utilisée pour identifier la liste des cibles qui doit être exécutée avant tout géré projet est exécuté à partir de Visual Studio. Dans cet objectif, je suis en utilisant le TransformXml tâche de transformer le web.de modèle.config, en utilisant le web correct.dev.*.fichier de configuration. Après que votre application démarre en utilisant le web correct.config en fonction de votre configuration de build. Après que j'ai une autre cible ExcludeCustomConfigTransformsFiles, qui, je l'injecter dans le processus de publication via l'attribut BeforeTargets="ExcludeFilesFromPackage". Cela est nécessaire parce que nous ne voulons pas de ces fichiers doivent être incluses lors de l'application est emballé ou publié. Donc, c'est vraiment tout là est à lui. Pour expliquer le processus de publication un peu plus pour ce scénario. Lorsque vous créez un package/publier le site web.debug.config ou web.la libération.config, en fonction de configuration de la compilation, pourront encore être utilisés. Mais en fin de compte le fichier qu'il est en train de transformer le web.de modèle.config, donc vous pourriez avoir à ajuster en fonction de ce que vous avez dans ce fichier. Des Questions Ou Des Commentaires?

35voto

Andrew est sur la bonne voie. Lorsque vous utilisez cette fonction ici est de savoir comment il a été conçu pour être utilisé.

web.config C'est le fichier de configuration dont les développeurs doivent utiliser localement. Idéalement, vous devriez obtenir ceci à être standardisée. Par exemple, vous pourriez utiliser localhost DB chaînes, et ce n'est pas. Vous devez vous efforcer pour que cela fonctionne sur les machines de dev sans modifications.

web.debug.config C'est la transformation qui est appliqué lorsque vous publiez votre application pour le développement de l'environnement de test. Cela permettrait de faire des modifications sur le site web.config qui sont nécessaires pour l'environnement cible.

web.la libération.config C'est la transformation qui est appliqué lorsque vous publiez votre application à la "production" de l'environnement. Évidemment, vous devrez être prudent avec les mots de passe en fonction de votre application ou de l'équipe.

Le problème de la transformation sur le web.config que vous utilisez actuellement est qu'une transformation peut effectuer des actions destructrices pour le web.config. Par exemple, il peut supprimer un des attributs, supprimer des éléments, etc.

28voto

Andrew Barber Points 25990

Vous pouvez simplement utiliser le fichier web.config « par défaut » que votre version de développement/débogage, et puis le web.release.config évidemment continuerait d’être la version finale, puisque ses transformations sont appliquées lorsque vous publiez.

18voto

Mitch Wheat Points 169614

Dans votre configuration de debug, ajouter une étape de post-génération et utilisez-le pour remplacer/transformer votre``

13voto

Metaphor Points 111

Même si je suis d'accord que l'approche la plus simple est souvent le meilleur, je peux facilement imaginer une circonstance où, pour une certaine période de temps, vous souhaitez connecter votre IDE de la base de données de test à la place de votre base de données de développement. Bien que vous pouvez spécifier le développement connecter les chaînes de votre site web par défaut.fichier de config, il serait vraiment agréable d'avoir un site Web.Test.fichier de configuration de sorte que lorsque vous changez votre configuration de build "Test", vous obtenez automatiquement les nouveaux paramètres tout en restant dans votre IDE.

L'historique de l'alternative est de commenter un ensemble de chaînes de connexion pour l'autre, mais ces nouvelles config transforme l'espoir d'enfin mettre un pieu dans le cœur de cette horrible pratique. Bien que l'un de fichier par défaut pour le développement et une transformation de mise en liberté peut travailler la plupart du temps, l'ajout d'une étape de post-construction de transformer le web.fichier de config est la réponse plus complète à mon avis.

-M

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X