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

Может ли MS Deploy делать пакет и преобразовывать, но не развертывать?

Используя msbuild в .NET 4.0, я могу создать веб-проект с целью "Пакет", и он неплохо выполняет задачу поместить пакет в zip файл. Но, когда я смотрю на web.config там, он не преобразуется, он имеет "$ (ReplacableToken_Web_SiteConnection-Web.config Connection String_0)"

Я могу запустить цель "TransformWebConfig", и он будет делать правильное преобразование, но только в своем собственном бункере.

Я также могу запустить цель "Создать" и передать свойства "DeployOnBuild = True; DeployTarget = MSDeployPublish", и он будет развертывать пакет на моем сервере с правильным преобразованием web.config.

Но если я хочу вручную развернуть пакет на сервере, как мне сделать "Пакет" с "TransformWebConfig", чтобы zip файл имел окончательный файл web.config?

4b9b3361

Ответ 1

Если вы хотите пропустить это, то вам нужно установить свойство в своей сборке. Вы можете сделать это двумя способами.

  • Отредактируйте файл проекта
  • Создайте файл .wpp.targets

Я бы порекомендовал # 2. В этом случае создайте новый файл в том же каталоге, что и файл проекта, с именем {ProjectName}.wpp.targets, где {ProjectName} - это имя вашего проекта. Затем внутри этого файла вы должны поместить следующее содержимое.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="4.0">
  <PropertyGroup>
    <AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
  </PropertyGroup>
</Project>

В этом случае вы устанавливаете свойство AutoParameterizationWebConfigConnectionStrings, в котором говорится, что веб-публикация не должна вставлять те {} заполнители в файле web.config для строк подключения.

Ответ 2

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

Цель - это вызов TransformXml и входит в состав Microsoft.Web.Publishing.Tasks.dll

В ваших собственных целях его

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"  /> 

Но он будет включен в сборку VS С# по умолчанию.

So

<TransformXml Source="web.config" Transform="web.release.config" Destination="$(DeployPath)\web.config" />

Есть ли у нас трюк.

Настройте эти пути с помощью правой ItemGroup (скорее всего, "контент" ) и убедитесь, что цель запущена до вызова пакета в вашем .csproj, а вывод сборки будет содержать "Web.config", как обычно, с правыми преобразованными значениями.

Альтернативно (мы использовали это для пакетов, которые должны быть всем для всех), вы можете использовать этот трюк, чтобы делать ВСЕ преобразования и включать каждый из них в финальный пакет. p >

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

Предполагая, что у вас есть web.usethisone.config в вашем пакете, который выглядит как

-skip:objectname=filepath,absolutepath=web\..*\.config 

-replace:objectName=filepath,match=.*web\.usethisone\.config,replace=web.config