34

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

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

EDIT: Используя ответ Сайед, я создал .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».

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

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 

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

ответ

34

Если вы хотите преобразовать конфигурационный файл без использования веб-публикации, тогда вы просто используете задачу 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. конфигурации.

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

+0

Это именно то, что мне было нужно, превратить web.config без строительства. Большое спасибо Sayed! –

+0

Сказал, вам не удастся узнать этот ответ на этот другой вопрос? http://stackoverflow.com/questions/2915329/advanced-tasks-using-web-config-transformation –

+0

Да, я знаю это, я только что ответил на это. –

2

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

Если вы используете Visual Studio 2013, вы можете установить SlowCheetah - XML ​​Превращает добавочные

Смежные вопросы