14

Czy są jakieś narzędzia lub rozszerzenia Visual Studio 2010, które pozwalają mi wyświetlić wynik transformacji pliku konfiguracyjnego, nie mając obowiązku publikowania całego projektu? Czy proces, który dokonuje transformacji, jest bezpośrednio dostępny do wglądu?Narzędzia do podglądu transformacji plików konfiguracyjnych


Edit

Po trochę więcej Googling natknąłem this:

Krok 4: Generowanie nowych przekształcony plik web.config dla środowiska „Staging” z linia komend

Otwarte wizualna szybka Studio poleceń przez zamiar Start -> Program Files -> Visual Studio v10.0 -> Visual Studio narzędzia -> Visual Studio 10.0 Polecenie Prompt

Type „MSBuild„Ścieżka do aplikacji projektu pliku (.csproj/.vbproj)” /T: TransformWebConfig /p: konfiguracja = postojowe” mocno wprowadzić, jak pokazano poniżej:

commandline web.config transformation

Po transformacji sukces web.config dla „inscenizacja” konfiguracji zostaną zapisane pod obj -> Rusztowania folderu pod korzeń projektu (w roztworze Explorer można dostęp ten folder przez pierwszych un-ukrywanie ukrytych plików):

transformed web.config

  • w Solution Explorer kliknij przycisk, aby pokazać ukryte pliki
  • Otwórz folder Obj
  • Przejdź do aktywnej konfiguracji (w naszym cu Sprawa rrent to „pomostowy”)
  • Można znaleźć przekształcony web.config tam

Można teraz sprawdzić, czy nowy plik web.config inscenizacji generowane ma zmieniony rozdział ciąg połączenia.

Źródło: Web Deployment: Web.Config Transformation

Nie jest to idealne rozwiązanie dla mnie, to nadal wymaga budowania całą Project- przynajmniej z poleceniem on pisał. Jeśli ktokolwiek zna sposób na pominięcie kroku kompilacji za pomocą polecenia MSBuild, które byłoby pomocne (chociaż brzmi to trochę nieprawdopodobnie).

Edycja 2

Ja również znaleźć ten Config Transformation Tool na CodePlex, który oferuje kilka ciekawych funkcji do przedłużenia procesu transformacji. To narzędzie jest najbliższą rzeczą, którą widziałem dla funkcji, której szukam, i byłby świetnym punktem wyjścia do opracowania rozszerzenia, które tworzy podglądy. Używa biblioteki Microsoft.Web.Publishing.Tasks do przeprowadzenia transformacji i nie zależy od budowania rzeczywistego projektu.

Odpowiedz

7

Możesz przekształcić plik konfiguracyjny za pomocą tych samych obiektów, których używa zadanie MSBuild, całkowicie pomijając MSBuild. Logika konwersji sieci Web zawarta jest w bibliotece Microsoft.Web.Publishing.Tasks.

Poniższy fragment kodu pochodzi z prostej biblioteki klas, nawiązującej do biblioteki Microsoft.Web.Publishing.Tasks (zainstalowanej na moim komputerze w C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10. 0 \ Web).

Próbka ładuje dokument źródłowy i transformuje, stosuje transformację i zapisuje wyniki w nowym pliku.

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

Przy odrobinie kreatywności, to proste rozwiązanie może być zintegrowany plugin Visual Studio, być może jako element menu kontekstowego na pliku web.config. Przynajmniej możesz zrobić z tego narzędzia konsoli lub skryptu, aby wygenerować podglądy.

Powodzenia!

+0

ten jest w istocie rozwinięciem mojego "Edycja 2" ust. Czuję, że potrzebuję przynajmniej takiego narzędzia i sam zaczynam układać je razem. Przy odrobinie szczęścia mam nadzieję wydać coś w galerii rozszerzeń w najbliższej przyszłości.Dziękuję za wejście! –

+0

@Nathan: Powodzenia z rozszerzeniem. Z niecierpliwością czekam na to. Narzędzie CodePlex działa poprzez wywołanie MSBuild. W przypadku niestandardowego narzędzia prawdopodobnie będziesz chciał korzystać z biblioteki bezpośrednio, jak pokazano na rysunku. Zrób mi przysługę i dodaj komentarz, gdy skończysz. Powodzenia! – kbrimington

+0

Początkowo sądziłem, że zadziałało, wywołując MSBuild, ale po przejrzeniu źródła zdałem sobie sprawę, że używa on bibliotek wymienionych powyżej. Z jego wyglądu nie powinno być wcale trudne zbudowanie funkcjonalnego prototypu rozszerzenia. –

12

SlowCheetah VS dodatek na visualstudiogallery pozwala na podgląd wyników przekształcenia

+1

Yeah SlowCheetah czyni to kliknięciem prawym, więc jest to idealne do tego –

+0

Po walce z transformacją przez ostatnie pół godziny myślałem, że będę google dla narzędzi transformacji, przyszedł tutaj, zainstalował go i natychmiast pokazał mój problem. Naprawiono za 2 minuty. Dodałem do mojego "must-have", jak sobie poradziłem bez tego wcześniej? " zestaw narzędzi. –

2

Stary post, ale pomyślałem, że podzielę się co znalazłem szybkim google (dla osób, które nie mogły znaleźć go lub próbowałem tu pierwszy):

Web.config Transformation Tester - By AppHarbor
Wystarczy wkleić oryginalny XML wraz z XML transformacji i zobaczyć wynik natychmiast.

Jest to również open source dla każdego, kto jest zainteresowany.

0

Po prostu trochę tego przedłużamy. Potrzebowałem dokładnie tego, co jest omówione powyżej. Aby móc uruchomić tylko transformację. Następnie dołącz to do mojego procesu tworzenia, który przypadkiem jest TeamCity w moim przypadku.

Będziesz potrzebował użyć Microsoft.Web.Publishing.Tasks, które możesz po prostu zniszczyć Nuget. Cóż, byłem w VS2013, więc mogłem. Jestem pewien, że można nabyć bibliotekę DLL w przeciwnym razie.

Napisana prosta aplikacja konsoli. Może się przydać.

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(); 
     } 
    } 
} 
Powiązane problemy