Как создать пакет облачного сервиса Azure из MsBuild в конвейере Azure - PullRequest
0 голосов
/ 14 мая 2019

У меня есть несколько проектов облачных сервисов, которые я пытаюсь вставить в CI / CD.Когда я щелкаю правой кнопкой мыши на проекте из Visual Studio и нажимаю Package, он делает то, что я хочу.Я могу видеть ServiceConfiguration.cscfg и ServiceDefinition.csdef в папке bin\Release после выполнения команды пакета.

Как мне добиться того же из командной строки MSBuild?Я попытался

msbuild.exe 
/p:DeployTarget=Package 
/p:DeployOnBuild=true 
/p:AutomatedBuild=True 
/p:configuration=release 
/p:outdir="D:\Pub" 
/p:targetprofile="Cloud" 
/target:Publish  
/p:SolutionDir=$/src/mysln/ WorkerRole.ccproj

, что я получаю, команда завершается, и я вижу около 241 DLL и необходимые файлы в папке.Я что-то упускаю в аргументе команды?Пожалуйста, совет

Редактировать: также ссылался на официальные документы , не мог ничего найти

Редактировать 2: Похоже, я могу генерировать пакеты.Теперь проблема заключается в том, чтобы сделать это в VSTS.Сбой сборки с " projectfile="*Undefined*Obfuscator\Maps\

В основном путь решения становится неопределенным

Редактировать 3: Вот сообщение об ошибке, когда я пытаюсь построить только CloudServiceProj

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5165,5): Error MSB3073: The command "if "Release" == "Debug" goto :exit
"*Undefined*Obfuscator\Tool\CO" projectfile="*Undefined*Obfuscator\Maps

Локально работает с undefined, поскольку в VS есть переменная $ (SolutionDir).Не уверен, как мне справиться с этим здесь

Обновление

Вот msbuild, который использует

enter image description here

Обновление 4

Я попытался построить решение, как было предложено, но у него есть некоторые проекты .NET CORE и .NET Framework, и я получаю эту ошибку

C:\Program Files\dotnet\sdk\2.2.105\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\Microsoft.NET.Sdk.Publish.targets(163,11): Error MSB4006: There is a circular dependency in the target dependency graph involving target "Publish"..

enter image description here

1 Ответ

1 голос
/ 15 мая 2019

Что я получаю, так это то, что команда завершена, и я вижу около 241 DLL и необходимые файлы в папке. Я что-то упускаю в аргументе команды?

Для этого вопроса вы можете попробовать изменить аргумент /p:outdir="D:\Pub" на /p:PublishDir="D:\Pub". Это потому, что аргумент outdir используется для хранения выходных файлов, а не файлов публикации, он содержит выходные данные сборки проектов (включая эталонный проект). Это причина, по которой в папке около 241 dll и необходимые файлы.

Когда я проверяю, если я изменю аргумент на PublishDir, он работает нормально:

enter image description here

Что касается второго вопроса, я не знаком с облачной службой Azure, поскольку я знаю о MSBuild / Visual Studio, мы должны создать «основной» проект вместо эталонного проекта, поэтому вы можете попытаться создать AzureCloudService.ccproj или создайте файл решения .sln.

Кроме того, когда мы строим проект / решение, нам не нужно указывать папку решения, просто укажите файл проекта или решение напрямую:

msbuild.exe "TheRelativePathForYourSolutionInRepos.sln" /t:Publish /p:DeployOnBuild=true /p:AutomatedBuild=True /p:configuration=release /p:TargetProfile=Cloud /p:PublishDir="D:\Pub"

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

Обновление:

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

Если в вашем событии сборки вы используете какие-либо макросы, например $(SolutionDir), но создаете файл проекта, вы получите эту ошибку. Поскольку в информации о решении существует справочная информация о проекте, мы не можем получить к ней доступ, когда строим только один проект.

Попробуйте заменить все $(SolutionDir) на $(ProjectDir)..\

Update2:

Поскольку вы можете без проблем создать файл .sln на своем локальном компьютере, вы также можете создать файл .sln с конвейером Azure. В качестве теста я мог создать файл .sln в конвейере Azure:

enter image description here

enter image description here

Кроме того, если вы замените $(SolutionDir) на $(ProjectDir)..\, как вы по-прежнему получите ошибку Undefined ? Попробуйте перепроверить событие вашей сборки, или вы можете поделиться им в вопросе.

Надеюсь, это поможет.

...