Инструменты для предварительного просмотра преобразований файла конфигурации - PullRequest
14 голосов
/ 22 сентября 2010

Существуют ли какие-либо инструменты или расширения Visual Studio 2010, которые позволяют мне просматривать результаты преобразования файла конфигурации, за исключением необходимости публиковать весь проект? Является ли процесс, непосредственно выполняющий преобразование, активным?


Редактировать

После еще немного поиска в Google я наткнулся на это :

Шаг 4. Создание нового преобразованного файла web.config для «промежуточной» среды из командной строки

Открыть командную строку Visual Studio собираюсь Пуск -> Программные файлы -> Visual Studio v10.0 -> Visual Studio Инструменты -> Команда Visual Studio 10.0 Подскажите

Тип «MSBuild» Путь к приложению файл проекта (.csproj / .vbproj) » / Т: TransformWebConfig / p: Конфигурация = Постановка "и нажмите введите, как показано ниже:

commandline web.config transformation

После успешного преобразования web.config для «Постановки» Конфигурация будет храниться под obj -> промежуточная папка под корнем вашего проекта (в обозревателе решений вы можете получить доступ к этой папке, сначала скрывая скрытые файлы):

transformed web.config

  • В обозревателе решений нажмите кнопку, чтобы отобразить скрытые файлы
  • Открыть папку Obj
  • Перейдите к вашей активной конфигурации (в нашем текущем случае это «Постановка»)
  • Вы можете найти преобразованный файл web.config там

Теперь вы можете проверить, что новый подготовка файла web.config имеет измененный раздел строки подключения.

Источник: Веб-развертывание: преобразование Web.Config

Это на самом деле не идеальное решение для меня, так как все еще требует построения всего проекта - по крайней мере, с помощью команды, которую он опубликовал. Если кто-нибудь знает способ пропустить этап сборки с помощью команды MSBuild, это будет полезно (хотя это звучит несколько маловероятно).

Редактировать 2

Я также нашел этот инструмент преобразования конфигурации в CodePlex, который предлагает некоторые приятные функциональные возможности для расширения процесса преобразования. Этот инструмент - самая близкая вещь, которую я видел по функциональности, которую я ищу, и будет отличной отправной точкой для разработки расширения, которое создает предварительные просмотры. Он использует библиотеку Microsoft.Web.Publishing.Tasks для выполнения преобразования и не зависит от построения реального проекта.

Ответы [ 4 ]

12 голосов
/ 26 августа 2011

Надстройка SlowCheetah VS в visualstudiogallery позволяет вам предварительно просмотреть результаты преобразования

7 голосов
/ 29 сентября 2010

Вы можете преобразовать файл конфигурации, используя те же объекты, которые использует задача MSBuild, минуя MSBuild. Логика преобразования веб-конфигурации содержится в библиотеке Microsoft.Web.Publishing.Tasks.

Следующий фрагмент кода взят из простой библиотеки классов, ссылающейся на библиотеку Microsoft.Web.Publishing.Tasks (которая установлена ​​на моем компьютере в C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web).

Образец загружает исходный документ и преобразование, применяет преобразование и записывает результаты в новый файл.

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

При небольшом творческом подходе это простое решение может быть интегрировано в плагин Visual Studio, возможно, в виде элемента контекстного меню в файле web.config. По крайней мере, вы можете сделать из нее консольную утилиту или скрипт для генерации превью.

Удачи!

2 голосов
/ 16 января 2014

Старый пост, но думал, что поделюсь тем, что нашел, с быстрым гуглом (для тех, кто, возможно, сначала его не нашел или попробовал здесь):

Преобразование Web.configTester - от AppHarbor
Просто вставьте свой оригинальный XML вместе с XML-кодом преобразования и мгновенно увидите результат.

Кроме того, это с открытым исходным кодом для всех, кто заинтересован.

0 голосов
/ 21 ноября 2014

Просто немного об этом. Мне нужно было именно то, что обсуждается выше. Чтобы иметь возможность запустить только преобразование. Затем подключите это к моему процессу сборки, который в моем случае оказывается TeamCity.

Вам потребуется использовать Microsoft.Web.Publishing.Tasks, которые вы можете просто разбить с помощью Nuget. Ну, я был в VS2013, чтобы я мог. Я уверен, что вы могли бы приобрести DLL в противном случае.

Написал простое консольное приложение. Вы можете найти это полезным.

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