14

Gibt es Tools oder Visual Studio 2010-Erweiterungen, die es mir ermöglichen, die Ausgabe einer Konfigurationsdateiumwandlung anzuzeigen, ohne das gesamte Projekt veröffentlichen zu müssen? Ist der Prozess, der die Transformation durchführt, direkt aufrufbar?Tools für die Vorschau von Konfigurationsdateitransformationen


bearbeiten

Nach etwas mehr googeln stieß ich auf this:

Schritt 4: eine neue transformierte web.config-Datei generieren für „Staging“ Umwelt aus Befehlszeile

Öffnen Sie Visual Studio-Eingabeaufforderung von Sie auf Start -> Programme -> Visual Studio v10.0 -> Visual Studio Tools -> Visual Studio 10.0 Befehl Prompt

Typ „MSBuild„Pfad zur Anwendung Projekt Datei (CSPROJ/.vbproj)“ /t: TransformWebConfig/p: Konfiguration = Staging“ und drücken einzugeben, wie unten gezeigt:

commandline web.config transformation

Sobald die Transformation erfolgreich die web.config für die „Staging“ Konfiguration wird unter obj gespeichert werden -> Ordner unter Ihrem Projektstamm Staging (in dem Solution Explorer können Sie Zugang diesen Ordner, indem zuerst un-versteckt versteckten Dateien):

transformed web.config

  • im Projektmappen-Explorer auf die Schaltfläche versteckte Dateien
  • Öffnen Sie den Ordner Obj
  • Navigieren Sie zu Ihrer Active-Konfiguration zeigen (in unserem cu rrent Fall ist es „Staging“)
  • Sie das transformierte web.config dort finden können

Sie können nun überprüfen, ob die neue Staging web.config-Datei erzeugt hat die geänderte Verbindungszeichenfolge Abschnitt.

Quelle: Web Deployment: Web.Config Transformation

Das ist nicht wirklich eine perfekte Lösung für mich, da es bedarf noch die gesamte projekt- Aufbau zumindest mit dem Befehl er geschrieben. Wenn jemand weiß, wie man den Build-Schritt mit dem MSBuild-Befehl überspringen kann, der hilfreich wäre (obwohl das etwas unwahrscheinlich klingt).

bearbeiten 2

Ich fand auch dieses Config Transformation Tool auf CodePlex, die einige nette Funktionalität bietet den Transformationsprozess zu verlängern. Dieses Werkzeug ist das, was ich am nächsten für die von mir gesuchte Funktionalität gesehen habe, und wäre ein guter Ausgangspunkt für die Entwicklung einer Erweiterung, die Vorschaubilder erzeugt. Es verwendet die Microsoft.Web.Publishing.Tasks-Bibliothek, um die Umwandlung durchzuführen, und hängt nicht vom Erstellen eines tatsächlichen Projekts ab.

Antwort

7

Sie können eine Konfigurationsdatei transformieren, indem Sie die gleichen Objekte verwenden, die die MSBuild-Task verwendet, und dabei MSBuild umgehen. Die Webkonfigurations-Transformationslogik ist in der Microsoft.Web.Publishing.Tasks-Bibliothek enthalten.

Das folgende Code-Snippet stammt aus einer einfachen Klassenbibliothek und verweist auf die Microsoft.Web.Publishing.Tasks-Bibliothek (die auf meinem Computer unter C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10 installiert ist). 0 \ Web).

Das Beispiel lädt ein Quelldokument und transformiert, wendet die Transformation an und schreibt die Ergebnisse in eine neue Datei.

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."); 

Mit einer wenig Kreativität, diese einfache Lösung könnte in ein Visual Studio-Plugin integriert werden, vielleicht als Menüpunkt Kontext auf der Datei web.config. Zumindest können Sie daraus ein Konsolendienstprogramm oder Skript erstellen, um eine Vorschau zu generieren.

Viel Glück!

+0

dies im Wesentlichen eine Erweiterung meiner "Edit 2" Absatz. Ich habe das Gefühl, dass es ein Werkzeug wie dieses gibt und ich fange an, die Teile selbst zusammenzufügen. Mit etwas Glück hoffe ich in naher Zukunft etwas in der Extension Gallery veröffentlichen zu können.Danke für die Eingabe! –

+0

@Nathan: Viel Glück mit der Erweiterung. Ich freue mich darauf, es zu sehen. Das CodePlex-Tool funktioniert durch Aufrufen von MSBuild. Für ein benutzerdefiniertes Tool möchten Sie die Bibliothek wahrscheinlich wie gezeigt direkt verwenden. Tu mir einen Gefallen und füge einen Kommentar hinzu, wenn du fertig bist. Viel Glück! – kbrimington

+0

Ich dachte auch zuerst, es funktionierte durch den Aufruf von MSBuild, aber nach dem Durchsuchen der Quelle erkannte ich, dass er die Bibliotheken verwendet, die Sie oben erwähnt haben. Aus der Sicht der Dinge sollte es nicht schwierig sein, einen funktionalen Prototyp der Erweiterung zu bauen. –

12

Die SlowCheetah VS-Add-In auf den visualstudiogallery ermöglicht es Ihnen, die Transformationsergebnisse

+1

Yeah SlowCheetah macht dies zu einem Rechtsklick, so dass es perfekt dafür ist. –

+0

Nachdem ich in der letzten halben Stunde mit einer Transformation gekämpft habe, dachte ich, dass ich Transform-Tools googlen würde. In 2 Minuten behoben. Zu meinem "Must-have" hinzugefügt, wie habe ich es vorher ohne es geschafft? Werkzeugkasten. –

2

Alte Post in der Vorschau anzeigen, aber dachte, ich würde teilen, was ich mit einer schnellen Google (für diejenigen gefunden hatte, die sie nicht haben gefunden, oder hier zuerst versucht):

Web.config Transformation Tester - By AppHarbor
Sie einfach Ihre ursprünglichen XML-Paste zusammen mit der Transformation von XML und das Ergebnis sofort sehen.

Auch ist es open source für jeden, der interessiert ist.

0

Nur um dies ein wenig zu erweitern. Ich brauchte genau das, was oben besprochen wurde. Um nur die Transformation ausführen zu können. Dann haken Sie das in meinen Build-Prozess, der in meinem Fall TeamCity ist.

Sie müssen Microsoft.Web.Publishing.Tasks verwenden, die Sie einfach mit Nuget zerschlagen können. Nun, ich war in VS2013, also könnte ich. Ich bin sicher, dass Sie die DLL sonst erwerben könnten.

Schrieb eine einfache Konsolen App. Sie können es nützlich finden.

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(); 
     } 
    } 
} 
Verwandte Themen