Ошибка сборки 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 я могу отлично подобрать, и решение настроено для восстановления пакета. Любые мысли?
Спасибо заранее.
Ответы
Ответ 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. На этот раз восстановление было успешным
Для всех кто сталкивался
Ответ 10
Правильное решение можно найти здесь: https://docs.microsoft.com/ru-ru/nuget/consume-packages/package-restore-trou устранение неполадок
Просто добавьте в NuGet.Config:
<!-- Package restore is enabled -->
<configuration>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
</configuration>