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