Подтвердить что ты не робот

Преобразование Web.config работает локально

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

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

EDIT: используя ответ Sayed, я создал файл .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" - это копия фрагмента кода Sayed в ответе ниже. Просто укажите источник, цель и назначение для преобразования. Новый файл, в данном случае, преобразованный "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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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