Microsoft.Web.WebJobs.Publish создает дубликаты сборок в пакете развертывания

У меня есть большое количество веб-заданий Azure, которые развертываются в одной службе приложений Azure вместе с веб-сайтом в той же службе приложений Azure. Все веб-задания используют пакет SDK для веб-заданий и пакет nuget Microsoft.Web.WebJobs.Publish (у нас последняя версия 1.0.13), чтобы упаковать их для развертывания. Ниже приведены аргументы MSBuild, которые мы используем в сборке CI (VSTS) для создания пакета развертывания.

/p:DeployOnBuild=true /p:PublishProfile=Release /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.StagingDirectory)

Это создает пакет, который отлично работает (в том смысле, что веб-задания выполняются правильно как веб-задания) с задачей VSTS «Развертывание веб-службы Azure», это не проблема.

Проблема в том, что пакет файлов .zip дублирует все сборки WebJob. Эти дубликаты в конечном итоге попадают в службу приложений Azure.

Структура папок в ZIP-файле каждого пакета веб-задания следующая:

- Content/[build agent full path]/
     - app_data/jobs/continuous/[web job name]/[assembly files]
     - bin/[assembly files]

Это вызывает проблемы по 3 причинам:

  1. Мы начали изучать возможности партнерства с поставщиком средств безопасности, который будет выполнять статический анализ наших пакетов развертывания. Это дублирование вызывает проблемы с отчетами.
  2. Поскольку bin/[assembly files] поступает в службу приложений, они смешиваются со сборками для веб-сайта, которые также развернуты в той же службе приложений.
  3. Наше время сборки/выпуска замедляется за счет переноса всего этого лишнего наворотов в эти пакеты развертывания. Моя команда практикует непрерывную доставку и ожидает, что конвейер будет быстрым.

Так почему же пакет Microsoft.Web.WebJobs.Publish добавляется в bin/[assembly files] в дополнение к обязательному app_data/jobs/continuous/[WebJobName]/[assembly files]? И что еще более важно, как я могу предотвратить включение bin/[assembly files] в процесс упаковки?

Мне бы очень не хотелось добавлять этапы сборки, чтобы разделить заархивированные пакеты и собрать их вместе без лишнего мусора, или найти способ вручную создать пакет для публикации. У вас есть 1 задание, Microsoft.Web.WebJobs.Publish! :)


person bojingo    schedule 16.06.2017    source источник


Ответы (2)


Мое обновление для https://stackoverflow.com/a/44611520/8654143

Мне пришлось добавить более одного переопределения для существующих целей, чтобы заставить его работать:

<Target Name="CollectFilesFromContent" />
<Target Name="CollectFilesFromReference" />
<Target Name="CollectFilesFromIntermediateAssembly" />
<Target Name="CollectFilesFrom_SourceItemsToCopyToOutputDirectory" />

Как его найти?

1) Запустите msbuild с /verbosity:diag

2) Осмотрите журнал и найдите DestinationRelativePath=bin; будет связанная запись FromTarget=SomeTargetName

3) Добавьте <Target Name="SomeTargetName" /> к .csproj

Вы должны закончить записью, помеченной FromTarget=PublishWebJob.

Я думаю, что можно каким-то образом отфильтровать содержимое переменной FilesForPackagingFromProject (возможно, переопределить цель CustomCollectFiles и изменить там FilesForPackagingFromProject), но я недостаточно хорошо знаю msbuild.

person Hipokamp    schedule 22.09.2017
comment
Это сработало для меня! Я обновился с Microsoft.Web.WebJobs.Publish‌​.1.0.11 до Microsoft.Web.WebJobs.Publish‌​.1.1.0, и исправления не было. Итак, мне пришлось добавить <Target Name="CollectFilesFromReference" /> и <Target Name="CollectFilesFromIntermediateAssembly" />. Спасибо! - person DaleyKD; 02.10.2017

Сожалеем, что вы столкнулись с этой проблемой. В качестве временного решения вы можете переопределить эту цель (CollectFilesFromIntermediateAssembly) в файле csproj. Это предотвратит публикацию файлов в папку bin.

Пример здесь: https://github.com/vijayrkn/ASPNetPublishSamples/blob/master/WebJobFullFramework/WebJobFullFramework.csproj#L56-L57

Мы скоро исправим эту проблему в пакете NuGet WebJobs.Publish.

person vijayrkn    schedule 18.06.2017
comment
Сейчас я экспериментирую с этим обходным путем, но не хочу помечать его как ответ, если ожидается постоянное исправление (лучше пометить ответ, когда кто-то скажет мне, какая официальная версия пакета это исправит). Могу ли я где-нибудь отследить это от команды WebJobs.Publish? Я не смог найти репозиторий GitHub для пакета... - person bojingo; 23.06.2017
comment
ОБНОВЛЕНИЕ: добавление <Target Name="CollectFilesFromIntermediateAssembly" /> в файлы .csproj веб-заданий, по-видимому, не повлияло на выходной пакет развертывания. - person bojingo; 23.06.2017
comment
Убедитесь, что вы переопределяете эту цель после этой строки (github .com/vijayrkn/ASPNetPublishSamples/blob/master/). Цель необходимо переопределить после импорта целей веб-задания. Мы отслеживаем эту проблему внутри компании, поскольку у нас нет проекта GitHub для этого. Подтвердит номер версии пакета, как только исправление будет доступно. - person vijayrkn; 23.06.2017
comment
К сожалению, даже когда сразу после <Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets')" /> он все равно включает дополнительную папку bin. - person bojingo; 23.06.2017
comment
Не могли бы вы запустить следующую команду в проекте WebJob и поделиться выводом с vramak (at) Microsoft. Это поможет нам диагностировать проблему. msbuild‹proj.csproj› /p:PublishUrl=c:\temp\Output\ /p:DeployOnBuild=true /p:Configuration=Release /p:WebPublishMethod=FileSystem /p:DeployTarget=WebPublish /v:diag (пример:github.com/vijayrkn/ASPNetPublishSamples/blob/master/) - person vijayrkn; 26.06.2017
comment
Я отправил вам электронное письмо, как вы просили. Название электронного письма было таким же, как и эта публикация SO. Электронное письмо было 24 МБ со всеми вложениями (с дублированием вывод сборки, очевидно, довольно большой), поэтому дайте мне знать, если оно не пройдет. - person bojingo; 06.07.2017
comment
@vijayrkn У меня такая же проблема, поэтому было бы неплохо узнать, когда она будет решена. - person Simon; 18.07.2017