Сделать преобразования Web.config локально - PullRequest
37 голосов
/ 01 сентября 2010

Я хочу, чтобы преобразования web.config работали локально, но, очевидно, преобразования происходят только при выполнении развертываний.

Кто-нибудь знает способ запуска цели msbuild «TransformWebConfig» без прохождения процесса «rebuild», а также указания и вывода каталога, в котором нужно выплевывать преобразованный web.config?

РЕДАКТИРОВАТЬ : Используя ответ Саида, я создал файл .bat, чтобы выполнить задачу для меня:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y  "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config"

"Transformation.proj" является копией фрагмента кода Саида в ответе ниже. Просто укажите источник, цель и место назначения для преобразования. Новый файл, в данном случае преобразованный «web.config», будет находиться в каталоге «D: \ Demo». Я просто копирую его, чтобы перезаписать файл web.config моего проекта и, наконец, удаляю сгенерированный файл в папке «demo».

Кроме того, я создал макрос для запуска этого пакетного файла и выполнения преобразования для меня:

Public Module DoTransform
    Sub RunTransformBatchFile()
        Try
          Process.Start("D:\Demo\RunTransform.bat")
        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Module

Вы также можете добавить кнопку на панели инструментов для запуска этого пакета и / или назначить клавишу быстрого доступа для выполнения.

Ответы [ 2 ]

37 голосов
/ 01 сентября 2010

если вы хотите преобразовать файл конфигурации без использования конвейера веб-публикации, тогда вы просто используете задачу TransformXml вручную.Я написал подробное сообщение в блоге по этому вопросу на http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx,, но вот основные моменты:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml"
             AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <Target Name="Demo">
        <TransformXml Source="app.config"
                      Transform="Transform.xml"
                      Destination="app.prod.config"/>
    </Target>
</Project>

Здесь я вручную преобразую файл app.config, используя файл transform.xml и место назначенияфайл app.prod.config.

Одна вещь, которую вы упомянули, была возможность выполнять преобразование локально при запуске приложения.Причина, по которой мы выполняем преобразование только для пакета / публикации, заключается в том, что если мы преобразовали сам файл web.config, то в следующий раз при отладке приложения приложение web.config снова преобразуется.Например, если в вашем файле web.debug.config есть преобразование для добавления значения в config, все в порядке, когда вы добавляете это в первый раз, но затем при следующем запуске / отладке приложения оно будет добавлено снова.Так что лучше этого избегать.

5 голосов
/ 11 октября 2016

Если вы используете Visual Studio 2015, вы можете просто щелкнуть правой кнопкой мыши на преобразовании нужной среды и нажать «Просмотр предварительного просмотра» ... Затем он сгенерирует преобразование, и вы можете скопировать и вставить его в обычныйФайл Web.config для отладки.Только не передавайте это!

Если вы используете Visual Studio 2013, вы можете установить расширение SlowCheetah - XML ​​Transforms

...