Как я могу избежать этой глубокой структуры папок с MSDeploy в файловую систему с использованием MSBuild?

StackOverflow https://stackoverflow.com/questions/4193788

Вопрос

Я вытаскиваю волосы из -за этой проблемы MSBuild.

Мы используем TeamCity для создания решения с двумя сайтами MVC в нем. В рамках сборки мы развертываем в папке на сервере сборки. IIS указывает на эту папку, чтобы дать нам сборку интеграции, видимой для управления.

Вот код из файла MSBuild, который использует MSDeploy для публикации пакета - но не в качестве zip -файла.

<Target Name="Deploy">
  <MSBuild 
    Projects="$(SolutionFile)"
    Properties="Platform=$(Platform);Configuration=$(Configuration);
    DeployOnBuild=true;
    DeployTarget=Package;
    PackageLocation=$(PackageLocation);
    PackageAsSingleFile=False;
    AutoParameterizationWebConfigConnectionStrings=False" />
</Target>

Проблема здесь в том, что мы получаем невероятно глубокую структуру папок. Вот пример ...

C: deploy archive content c_c users edmond documents visual Studio 2008 creatiogreen creatio code core trunk websity websity obj release package packagetmp [опубликованные файлы

Я действительно хочу развернуть в предсказуемых папках, таких как ...

C: build websity [опубликованные файлы] C: build mobileWebsite [опубликованные файлы

Это фон. Вот конкретные вопросы.

  1. Мы делаем ошибку, пытаясь использовать MSDeploy для публикации в локальную файловую систему? Нам в основном нужен эквивалент функции VS2010 «Публикация» с преобразованием конфигурации. Мы не пытаемся развернуть для удаленных экземпляров IIS или чего -то еще.

  2. Есть ли способ сделать это, но указать папки публикации?

  3. Я пытался использовать задачу копии MSBuild для копирования файлов в более разумные папки - но я не могу понять, как использовать подстановки, чтобы указать папки, которые нам нужно взять - это должно быть что -то вроде ...

C: foterpackageendendupin [an -worlolders] websity [an -workfolders] packagetmp**.

Помощь!

Это было полезно?

Решение

Вы можете использовать WebDeploy напрямую, чтобы получить более настроенный результат. Например, вы можете использовать следующую команду для синхронизации 2 папок непосредственно корневой корневой:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>

Или вы можете сделать WebDeploy включить конфигурацию IIS в пункт назначения, используя поставщика IISAPP вместо Dirpath:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>

Например, для синхронизации из простой папки в новое приложение «NewApp» в разделе веб -сайт по умолчанию вы будете называть его таким образом:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"

Затем у вас может быть пакетный файл, который будет выполнять синхронизацию/упаковку, вызывая WebDeploy напрямую и будет выполнять в качестве события после сборки.

Другие советы

Если вы добавите параметр _packagetempdir в MSBuild, он даст вам те же результаты, что и локальная публикация. например

msbuild c: pathtomyproj.csproj /p: configuration = uat; deploonbuild = true; packageassingsinglefile = false; deployTarget = package; _packageTempdir = c: pathtomydeploy ; autoParametizationWebConfigConnectionStrings = falseDeploy ; AutoParametizationWebConfigConnectionStrings

Эта команда опубликует все мои файлы в C: PathtomyDeploy Без сумасшедших подпапок

Существует слегка скрытое, но элегантное решение.

При запуске сборки на общем CI -сервере может быть трудно упаковать в C: ROY по соображениям изоляции. В конечном итоге можно предпочесть удалить глубокий путь в самом пакете.

К счастью, есть решение. Добавьте правило замены в файл .pubxml! Я нашел его в дополнение к двигателю внутри MS Build, 2 -е издание: https://www.microsoft.com/learning/en-us/book.aspx?id=16854

Я также нашел это в этом блоге: http://learnaspmvc.blogspot.se/2014/07/web-packaging-fixing-long-path-issue.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top