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

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

Я вытягиваю свои волосы над этой проблемой 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\Website\Website\obj\Release\Package\PackageTmp [опубликованные файлы]

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

C:\build\website [опубликованные файлы] C:\build\mobilewebsite [опубликованные файлы]

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

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

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

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

C:.\FolderPackageEndsUpIn [ANYFOLDERS]\Сайт [ANYFOLDERS]\PackageTmp **

Help!

4b9b3361

Ответ 1

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

>"%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 и исполняемый как событие после сборки.

Ответ 2

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

msbuild C:\PathToMyProj.csproj/p: Configuration = UAT; DeployOnBuild = true; PackageAsSingleFile = False; DeployTarget = Package; _PackageTempDir = c:\PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false

Эта команда будет публиковать все мои файлы в c:\PathToMyDeploy\без сумасшедших подпапок

Ответ 3

Есть немного скрытое, но элегантное решение.

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

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

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