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

Ошибка сборки Team Foundation Service при восстановлении пакета NuGet

У меня возникла странная проблема с моей сборкой Team Foundation Service. Я помещаю в очередь, и он начинается просто отлично, но затем он терпит неудачу со следующей ошибкой:

C:\a\src\Platform\Prod\Platform.Web\Platform.Web.csproj (436): The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.

Итак, я снова ставил очередь сборки на сообщение /URL и... это происходит снова. У меня Googled, но я не могу понять, в чем проблема. В Visual Studio я могу отлично подобрать, и решение настроено для восстановления пакета. Любые мысли?

Спасибо заранее.

4b9b3361

Ответ 1

Решение этого параметра указано в link в самом сообщении об ошибке.

Это происходит из-за улучшения, указанного на этой странице:

Улучшение

Мы обновили Microsoft.Bcl.Build, чтобы использовать другой подход. Новый версия будет использовать условный импорт, подобный тому, что NuGets автоматический импорт функция. Это всегда позволит проекту загрузить в Visual Studio.

Однако Microsoft.Bcl.Build также добавляет цель в ваш проект, который будет запущен после завершения сборки. Эта цель проверяет, текущая сборка восстановленных пакетов, и если это не удается построить с помощью сообщение об ошибке:

Построение второго раза исправит эту ошибку. Обратите внимание, что это ошибка будет появляться только в том случае, если пакеты отсутствуют, так что это не похоже на вас всегда приходится строить дважды.

Затем он указывает, как показано ниже для случая сервера сборки/непрерывной интеграции (CI):

Это решение не адресует сервер сборки/непрерывную интеграцию (CI). Чтобы успешно использовать восстановление пакета на сервер сборки, у вас есть два варианта:

  • Зайдите в файл .targets.
  • Явное выполнение восстановления пакета NuGet до создания проекта/решения.

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

Ответ 2

Если у кого-то еще есть эта проблема на сервере сборки tfs, вам нужно сделать следующее:

  • Убедитесь, что все проекты в решении, которые вы пытаетесь создать, имеют последний пакет Microsoft.Bcl.Build(просто обновите его в диспетчере пакетов).
  • После сборки не удалось просмотреть весь проект (в сводке журнала сборки tfs), которые генерируют эту ошибку ( "Восстановленные сборки пакетов NuGet..." )
  • Откройте каждый из этих файлов проекта .proj и закомментируйте весь целевой элемент, начатый с 'Target Name= "EnsureBclBuildImported"
  • Зайти и повторить сборку

Кажется, что после обновления не все проекты удаляют старый код кода сборки, и это вызывает проблемы (как я понимаю, это больше не нужно после того, как Microsoft изменил процесс сборки bcl).

Ответ 3

Я видел подобную проблему в проекте Xamarin, и следующие шаги исправили мою проблему:

  • Установить режим проекта для выпуска и восстановления всех
  • Установите режим проекта обратно в Debug и перестройте все
  • Проблема отсортирована.

Странно, но работал на меня, надеюсь, что это поможет.

Ответ 4

Либо требуемые файлы целей TFSBuild должны быть включены в исходный элемент управления, либо пакеты NuGet должны быть восстановлены до попытки создания решения.

Подробности о том, как это сделать, приведены на nuget.org.

В основном это связано с созданием нового файла проекта сборки, который сначала восстанавливает пакеты, а затем создает ваше решение.

Ответ 5

Просто была такая же проблема с TeamCity, а не с TFS.

Мы явно восстанавливаем пакеты перед сборкой, но некоторые проекты все еще не работают на сервере CI.

Мы смогли решить эту проблему без взлома файлов csproj.

Мы принудительно установили свойство сборки BclBuildImported = True после восстановления пакетов. Мошеннические цели в файлах csproj зависят от того, не задано ли это свойство.

Может быть более надежный способ обойти это, если вы можете легко установить это свойство в TFS.

Ответ 6

Я столкнулся с этой проблемой в проекте Web API, но мы используем NAnt.

Решением было обновление пакета nuget для компонентов Microsoft BCL Build Components до последнего (1.0.21), и теперь все будет хорошо.

Ответ 7

Откройте оскорбительный csproj в блокноте или в любом другом редакторе. Проверьте, доступен ли целевой файл EnsureBclBuildImported в csproj. Если это так, закомментируйте второе условие ошибки внутри цели, которое направляет сборку в состояние сбоя, даже если пакет доступен (как, например, сбой сборки независимо от того, доступен пакет или нет!).

< Target Name= "EnsureBclBuildImported" BeforeTargets = "BeforeBuild" Условие = "'$ (BclBuildImported)' == ''" >

    < Error Condition = "! Exists ('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "Этот проект ссылается на пакет NuGet, отсутствующие в этот компьютер. Включите восстановление пакета NuGet, чтобы загрузить их. Для более подробную информацию см. http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword = "BCLBUILD2001" / >

     < Error Condition = "Exists ('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text = "Восстановленные сборки NuGet. включить эти пакеты в сборку. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword = "BCLBUILD2002" / > Забастовкa >
</Целевая >

Ответ 8

Мне пришлось восстанавливать пакеты до чистой цели моей сборки script. Я по ошибке думал, что восстановление пакетов до постройки было достаточно.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets='GatherBinaries' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>

    <Target Name='RestorePackages'>
        <Exec Command='tools\NuGet.exe Restore "Web.sln"'/>
    </Target>

    <!--
        must call RestorePackages prior to clean to avoid error the following error
        "The build restored NuGet packages. Build the project again to include these packages in the build."
        -->
    <Target Name='Clean' DependsOnTargets='RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Clean' Properties='Configuration=Release'/>
    </Target>

    <Target Name='Build' DependsOnTargets='Clean;RestorePackages'>
        <MSBuild Projects='Web.sln' Targets='Build' Properties='Configuration=Release'/>
    </Target>

</Project>

Ответ 9

Проблемная история:

В моем случае один из моих товарищей по команде использовал VisualStudio 2017. Там мы понизили некоторые пакеты nuget из файла проекта, написав версии руками, такими как postsharp и т.д. Это сработало, и он отправил обновленный код в gitlab. Со своей стороны я объединил код из gitlab в локальный репозиторий и открыл его с помощью VisualStudio 2019, и я принимаю эту ошибку

Решение:

1- Я открыл код в VisualStudio 2017 из моего обновленного локального репозитория и перестроил его вместе с ним.

2- Я закрыл VisualStudio 2017 и снова открыл VisualStudio 2019. На этот раз восстановление было успешным

Для всех кто сталкивался