Инструменты для предварительного просмотра конфигурационных файлов

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


Edit

После немного больше Googling я наткнулся на this:

Шаг 4: Создание нового преобразованного файла web.config для среды "Staging" из командной строки

Откройте командную строку Visual Studio Начало → Программные файлы → Visual Studio v10.0 → Visual Studio инструменты → Visual Studio 10.0 Command Подскажите

Введите путь "MSBuild" к приложению файл проекта (.csproj/.vbproj) "/Т: TransformWebConfig /p: Configuration = Staging" и нажмите введите, как показано ниже:

commandline web.config transformation

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

transformed web.config

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

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

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

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

Изменить 2

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

Ответы

Ответ 1

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

Ответ 2

Вы можете преобразовать конфигурационный файл, используя те же объекты, которые использует задача 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. По крайней мере, вы можете сделать консольную утилиту или script из нее, чтобы генерировать предварительные просмотры.

Удачи!

Ответ 3

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

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

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

Ответ 4

Просто немного потянемся на это. Мне было нужно именно то, о чем говорилось выше. Чтобы иметь возможность запускать только преобразование. Затем подключите это к моему процессу сборки, который, случается, является 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();
        }
    }
}