Может ли MS Deploy сделать пакет и преобразовать, но не развернуть? - PullRequest
13 голосов
/ 01 сентября 2010

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 13 октября 2010

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

  1. Изменить файл проекта
  2. Создать файл .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.для строк подключения.

10 голосов
/ 02 сентября 2010

То, как мы это делаем, - это изменение сборки проекта для преобразования перед упаковкой.

Целью является вызов TransformXml и является частью Microsoft.Web.Publishing.Tasks.dll

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

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

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

Итак

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

Делает трюк для нас.

Установите эти пути с правильной ItemGroup (скорее всего, «content») и убедитесь, что цель запускается до вызова Package в вашем .csproj, а выходные данные сборки будут содержать «Web.config», как обычно , с правыми преобразованными значениями.

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

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

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

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

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