Использование задач MSBuild и CSPack для упаковки ролей Azure - PullRequest
9 голосов
/ 19 января 2011

Я работаю над сценарием сборки для проекта веб-роли Azure. Сценарий будет выполняться на сервере сборки, поэтому использование VS не является началом.

Я могу построить проект с помощью MSBuild и использовать CmdLets для Azure для управления развертыванием (через PowerShell). Часть, которая отсутствует, - это создание облачного пакета. Я могу использовать инструмент CSPack.exe, который входит в SDK, но я бы хотел использовать задачи MSBuild, если это возможно, так как я могу использовать параметры конфигурации сборки и интегрировать создание пакета с остальной частью процесса.

Я копался в проекте веб-развертывания Azure, но не могу найти никаких ссылок на задачу CSPack. Здесь может произойти какая-то магия VS, если я не пропущу файл, который ссылается на задачи CSPack / Azure. Сборка, на которую я смотрю - это Microsoft.ServiceHosting.Tools.MSBuildTasks.dll - рефлектор говорит мне, что там находится задача CSPack.

Кто-нибудь успешно использовал задачу CSPack MSBuild? Если да, то любые указания относительно того, как его использовать, будут очень полезны!

Если я лаю совсем не на том дереве, пожалуйста, дайте мне знать!

Спасибо, Erick

Ответы [ 3 ]

7 голосов
/ 28 января 2011

Задача CSpack является частью Microsoft.CloudService.Targets msbuild-файла. При установке по умолчанию это в

C: \ Program Files (x86) \ MSbuild \ Microsoft \ CloudService \ 1.0 \ Visual Studio 10 \

Ссылку на это вы увидите в любом проекте .ccproj (облачный сервис)

<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\Cloud Service\1.0\Visual Studio 10.0\</CloudExtensionsDir>

<Import Project="$(CloudExtensionsDir)Microsoft.CloudService.targets" />

Оттуда вы можете получить базовый формат и несколько вариантов. Как пример, это цель CorePublish, использующая ее

<CSPack
  ServiceDefinitionFile="@(ServiceDefinitionCopy)"
  Output="$(OutDir)Publish\$(ProjectName).cspkg"
  PackRoles="@(Roles)"
  SiteMapping="@(SiteMapping)"
  RoleProperties="@(RoleProperties)"
  CopyOnly="false"
  >
</CSPack>

Мы используем этот способ для создания наших облачных пакетов. Если здесь есть конкретный сценарий, по которому вам нужен совет, предоставьте эту информацию. Наше использование довольно распространено, мы просто (как и вы) не были заинтересованы в использовании msbuild для вызова из командной строки.

Так что сложив все воедино, можно просто выдать

msbuild MyAzureProject.ccproj /t:CorePublish

или если у вас есть решение с многоуровневыми папками проектов и вы хотите упаковать биты выпуска

msbuild MyAzureProject\MyAzureProject.ccproj /t:CorePublish /Property:SolutionDir=..\ /p:Configuration=Release

1 голос
/ 19 января 2011

Я просто использую

<Exec Command="$(PackageCommand)" WorkingDirectory="$(BuildProjectFolderPath)\..\main\source\" />

где PackageCommand это то, что вы используете в командной строке для вызова cspack.exe.

1 голос
/ 19 января 2011

Я использую их, но на серверах сборки установлены Visual Studio и Azure SDK 1.3. Я не мог найти способ обойти это. Вам может не понравиться использование Visual Studio Express на серверах сборки, поэтому вы можете сначала попробовать.

...