it-swarm.com.ru

Файл ресурсов project.assets.json не найден при запуске сборки в Devure для Azure.

У меня есть конвейер сборки, сконфигурированный для решения Service Fabric в DevOps Azure, например:

 Build tasks

Все было хорошо до тех пор, пока несколько дней назад не начался сбой сборки на конкретном агенте сборки (частном) со следующей ошибкой (для нескольких проектов):

C:\Program Files\dotnet\sdk\2.1.200\Sdks\Microsoft.NET.Sdk\build\Microsoft.PackageDependencyResolution.targets (327,5): Ошибка: файл ресурсов 'F:\Agent03\w\84\s\src\MyProject.Sam.Tiles.Domain\obj\project.assets.json 'не найден. Запустите восстановление пакета NuGet для создания этого файла.

Неудачной задачей является Build solution $(PathToSolution).

Странно то, что сборка завершается неудачно при работе на некоторых агентах, но с другими сборка в порядке.

Некоторые детали:

  • Думаю, задача Use NuGet 4.x начала использовать NuGet v4.9.1 совсем недавно. Я попытался использовать v4.8.1 без удачи;
  • Большинство проектов используют формат PackageReference, но проект .sfproj использует файл packages.config
  • Я пытался использовать задачу dotnet restore, но при попытке восстановить пакеты для проекта .sfproj произошла ошибка:

    `Ошибка: невозможно найти »....\пакеты\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\построить\Microsoft.VisualStudio.Azure.Fabric.Application.props' файл. Пожалуйста, восстановите Пакет Nuget "Microsoft.VisualStudio.Azure.Fabric.MSBuild"

Любая идея о том, что может быть причиной этой проблемы?

4
Rui Jarimba

Некоторые проекты используют формат PackageReference, но проект .sfproj использует файл packages.config.

Я до сих пор не понимаю, почему сборка стала давать сбой, но я смог найти обходной путь. Учитывая, что PackageReference еще не поддерживается в проектах Service Fabric, мой обходной путь заключался в использовании both задач восстановления следующим образом:

 Build tasks

2
Rui Jarimba

Комментарий Тревора 20.02 дал мне подсказку. Скорее всего, у вас нет полного набора проектов, на которые ссылается решение. (ProjectReferences может перейти к другим проектам, которых нет в решении).

Вот почему этот сумасшедший обходной путь (запуск задач восстановления dotnet.exe и nuget.exe) сработал:

dotnet restore по умолчанию просматривает ссылки на проекты, чтобы гарантировать, что они также будут восстановлены .-- переключатель no-dependencies может отключить это.

восстановление по умолчанию для nuget.exe имеет противоположное значение по умолчанию, потому что мы не хотели ломать старых пользователей. - рекурсивный может включить это.

Правильное решение состоит в том, чтобы ваше решение содержало все проекты.

-Rob Relyea Клиентская команда NuGet, технический директор

1
Rob Relyea

Моя проблема оказалась решением, которое не включало в себя все необходимые проекты.

У меня есть главный файл решения, который включает в себя все мои проекты, и несколько небольших файлов решений только с некоторыми из проектов. Основное решение прекрасно скомпоновано в Azure DevOps, но частичное решение не удалось.

Я понял, что отсутствующий файл project.assets.json принадлежит проекту, который необходимо включить в это ошибочное решение.

0
Trevor