14

Existe-t-il des outils ou des extensions Visual Studio 2010 qui me permettent d'afficher la sortie d'une transformation de fichier de configuration sans avoir à publier l'ensemble du projet? Le processus qui effectue la transformation est-il directement invocable?Outils de prévisualisation des transformations de fichiers de configuration


Modifier

Après un peu plus googler je suis tombé sur this:

Étape 4: Création d'un nouveau fichier web.config transformé pour l'environnement « Staging » de ligne de commande

Ouvrez l'invite de commande Visual Studio par sur Démarrer -> Programmes -> v10.0 Visual Studio -> Visual Studio Outils -> Visual Studio 10.0 Commande rapide

Tapez « MSBuild « Path to application projet déposer (.csproj/.vbproj) » /t: TransformWebConfig /p: configuration = Staging » et appuyez sur entrer comme indiqué ci-dessous:

commandline web.config transformation

Une fois que la transformation est réussie le web.config pour la « Mise en scène » configuration seront stockées sous obj -> Mise en scène dossier sous la racine de votre projet (explorateur de solution, vous pouvez accéder à ce dossier par les premiers un-cache les fichiers cachés):

transformed web.config

  • dans l'explorateur de solution cliquez sur le bouton pour afficher les fichiers cachés
  • Ouvrez le dossier Obj
  • Accédez à votre configuration active (dans notre cu rrent cas, il est « Mise en scène »)
  • Vous pouvez trouver là web.config transformé

Vous pouvez maintenant vérifier que le nouveau fichier web.config mise en scène généré a la section de chaîne de connexion modifiée.

Source: Web Deployment: Web.Config Transformation

Ce n'est pas vraiment une solution parfaite pour moi car il faut encore construire l'ensemble Projet- au moins avec la commande qu'il a écrit. Si quelqu'un sait de quelle façon ignorer l'étape de construction avec la commande MSBuild qui serait utile (bien que cela semble peu probable).

Modifier 2

Je trouve aussi cette Config Transformation Tool sur CodePlex, qui offre une fonctionnalité agréable d'étendre le processus de transformation. Cet outil est la chose la plus proche que j'ai vu pour la fonctionnalité que je recherche et serait un bon point de départ pour développer une extension qui crée des aperçus. Il utilise la bibliothèque Microsoft.Web.Publishing.Tasks pour effectuer la transformation et ne dépend pas de la construction d'un projet réel.

Répondre

7

Vous pouvez transformer un fichier de configuration en utilisant les mêmes objets que la tâche MSBuild utilise, en ignorant complètement MSBuild. La logique de transformation Web config est contenue dans la bibliothèque Microsoft.Web.Publishing.Tasks. L'extrait de code suivant provient d'une bibliothèque de classes simple, référençant la bibliothèque Microsoft.Web.Publishing.Tasks (qui est installée sur ma machine sur C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10. 0 \ Web).

L'exemple charge un document source et le transforme, applique la transformation et écrit les résultats dans un nouveau fichier.

using System; 
using Microsoft.Web.Publishing.Tasks; 

// ... 

var xmlTarget = new XmlTransformableDocument(); 
xmlTarget.PreserveWhitespace = true; 
xmlTarget.Load("Web.config"); 

var xmlTransform = new XmlTransformation("Web.Release.config"); 

if (xmlTransform.Apply(xmlTarget)) 
    xmlTarget.Save("Web.Transformed.config"); 
else 
    Console.WriteLine("Unable to apply transform."); 

Avec un peu de créativité, cette solution simple pourrait être intégré dans un plug-in Visual Studio, peut-être un élément de menu contextuel sur le fichier web.config. À tout le moins, vous pouvez en faire un utilitaire de console ou un script pour générer des aperçus.

Bonne chance!

+0

c'est essentiellement une extension de mon paragraphe "Edit 2". J'ai l'impression qu'il y a au moins un besoin d'un outil comme celui-ci et que je commence à assembler les pièces moi-même. Avec un peu de chance, j'espère pouvoir publier quelque chose sur la galerie d'extension dans un proche avenir.Merci de votre contribution! –

+0

@Nathan: Bonne chance avec l'extension. J'ai hâte de le voir. L'outil CodePlex fonctionne en appelant MSBuild. Pour un outil personnalisé, vous voudrez probablement utiliser la bibliothèque directement comme indiqué. Faites-moi une faveur et ajoutez un commentaire lorsque vous avez terminé. Bonne chance! – kbrimington

+0

J'ai d'abord pensé que cela fonctionnait en invoquant MSBuild, mais après avoir parcouru la source, j'ai réalisé qu'il utilisait les bibliothèques que vous avez mentionnées plus haut. D'après son apparence, il ne devrait pas être difficile de construire un prototype fonctionnel de l'extension. –

12

Le SlowCheetah VS ajouter dans le visualstudiogallery vous permet de prévisualiser les transformer les résultats

+1

Ouais SlowCheetah fait cela en un clic-droit, donc c'est parfait pour cela –

+0

Après avoir lutté avec une transformation pour la dernière demi-heure pensé que google pour les outils de transformation, est venu ici, l'a installé et il a montré mon problème tout de suite. Fixé en 2 minutes. Ajouté à mon "must-have, comment je me débrouille sans ça avant?" boîte à outils –

2

post vieux, mais je pensais que je voudrais partager ce que j'avais trouvé un rapide Google (pour ceux qui ne peuvent pas avoir trouvé ou essayé ici d'abord):

Web.config Transformation Tester - By AppHarbor
coller simplement votre XML d'origine ainsi que le XML de transformation et de voir instantanément le résultat.

En outre, c'est open source pour tous ceux qui sont intéressés.

0

Juste pour prolonger un peu. J'avais besoin exactement de ce qui est discuté ci-dessus. Pour pouvoir exécuter la transformation uniquement. Ensuite, accrochez cela dans mon processus de construction qui se trouve être TeamCity dans mon cas.

Vous aurez besoin de Microsoft.Web.Publishing.Tasks, que vous pouvez démonter avec Nuget. Eh bien, j'étais dans VS2013 donc je pouvais. Je suis sûr que vous pourriez acquérir la DLL autrement.

A écrit une simple application de console. Vous pourriez le trouver utile.

Program.cs

using System; 

namespace WebConfigTransform 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length != 3) 
      { 
       Console.WriteLine("Config Gen ... usage -source -transform -destination"); 
       Environment.Exit(-1); 
      } 

      Transform t = new Transform(args[0], args[1], args[2]); 
      t.Run(); 
     } 
    } 
} 

Transform.cs

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Security; 
using System.Security.Permissions; 
using Microsoft.Web.XmlTransform; 

namespace WebConfigTransform 
{ 
    class Transform 
    { 
     private readonly string m_source; 
     private readonly string m_transform; 
     private readonly string m_destination; 

     public Transform(string source, string transform, string destination) 
     { 
      m_source = source; 
      m_transform = transform; 
      m_destination = destination; 
     } 

     private void TransformFiles() 
     { 
      var xmlTarget = new XmlTransformableDocument(); 
      xmlTarget.PreserveWhitespace = true; 
      xmlTarget.Load(m_source); 
      var xmlTransform = new XmlTransformation(m_transform); 

      if (xmlTransform.Apply(xmlTarget)) 
       xmlTarget.Save(m_destination); 
      else 
      { 
       Console.WriteLine("Unable to apply transform."); 
       Environment.Exit(-1); 
      } 
     } 

     private void CheckPermissions() 
     { 
      string directoryName = m_destination; 
      PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
      FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, directoryName); 
      permissionSet.AddPermission(writePermission); 
      if (!(permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))) 
      { 
       Console.WriteLine("Cannot write to file : " + m_destination); 
       Environment.Exit(-1); 
      } 
     } 

     private void CheckFileExistance() 
     { 
      List<string> ls = new List<string>(); 
      ls.Add(m_source); 
      ls.Add(m_transform); 
      foreach (string item in ls) 
      { 
       if (!File.Exists(item)) 
       { 
        Console.WriteLine("Cannot locate file : " + item); 
        Environment.Exit(-1); 
       } 
      } 
     } 

     public void Run() 
     { 
      CheckFileExistance(); 
      CheckPermissions(); 
      TransformFiles(); 
     } 
    } 
} 
Questions connexes