Данный проект ссылается на пакеты NuGet, отсутству...

تم الإنشاء في: ٢٨ أغسطس ٢٠٢٥

تمت الإجابة باستخدام GPT-5 Thinking بواسطة Chat01

سؤال

Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: packages\inteltbb.redist.win.2022.2.0.503\build\native\inteltbb.redist.win.targets. я получаю эту ошибку в своей DLL у меня раньше действительно в ней были установлены ну гет пакеты, но теперь я удалил их, удалил папку с пакетами, почистил все конфигурационные файлы, и эта ошибка всё равно возникает, при том что моя DLL максимально простая и должна собираться без проблем, расскажи в чём может быть проблема, при том, что файл TEST_FUNC.vcxproj очищен и там ничего нет или я его удалял, я не понимаю почему пишет что ошибка в нём хотя этот файл у меня чист, сами пакеты нугет очищены - как удалить все остаточные данные воспоминания в проекте или какие-то ссылки внешние зависимости на эти нугет пакеты или может быть на эти нугет пакет ссылается не сама DLL а проект который её использует хотя я получаю эту ошибку когда пытаюсь собрать DLL изолированно

الفكرة

Thought for 1m 4s

الإجابة

Проблема почти наверняка не в «кэше NuGet» как таковом, а в том, что где-то ещё осталась MSBuild-ссылка на .targets/.props из пакета inteltbb.redist.win. Когда такой пакет ставится (особенно в проектах C++ с packages.config), NuGet вставляет в проект:

  • <Import Project="...\inteltbb.redist.win.targets" .../> и/или .props
  • таргет EnsureNuGetPackageBuildImports, который специально падает с ошибкой, если нужный файл не найден — с тем самым текстом и ссылкой LinkID=322105.

Даже если вы удалили сам пакет и папку packages\…, любая оставшаяся Import/EnsureNuGetPackageBuildImports будет продолжать ронять сборку.

Вот что чаще всего оказывается источником «призрачной» ссылки (и почему может упоминаться TEST_FUNC.vcxproj, хотя он «чистый» или удалён):

  1. Сама .vcxproj (или другая .vcxproj в решении) всё ещё содержит блоки Import/EnsureNuGetPackageBuildImports.
  2. User-props лист: $(UserRootDir)\Microsoft.Cpp.$(Platform).user.props — глобальный файл свойств, который подхватывается каждым C++-проектом. Многие случайно добавляют туда пути через Property Manager, и тогда импорт inteltbb приезжает в любой проект.
  3. Directory.Build.props/targets где-то выше по дереву каталогов.
  4. .vcxproj.user, *.props в Property Manager, либо зависимый проект в решении (тот самый TEST_FUNC), который всё ещё включён в .sln.
  5. Сгенерированные файлы в obj\: *.nuget.g.props / *.nuget.g.targets могут подтягиваться, если в проекте осталось packages.config или <PackageReference …>.

Как вычистить «хвосты» (надёжный чек-лист)

Сделайте шаги именно в таком порядке:

  1. Полный поиск от корня репозитория — найдите, где именно всплывает inteltbb:

    • PowerShell:
      powershell
      Get-ChildItem -Recurse -Include *.sln,*.vcxproj,*.props,*.targets,packages.config,Directory.Build.* | Select-String -Pattern 'inteltbb', 'EnsureNuGetPackageBuildImports'
    • или CMD:
      findstr /S /N /I "inteltbb redist EnsureNuGetPackageBuildImports" *.sln *.vcxproj *.props *.targets packages.config Directory.Build.*
      

    Всё, что найдено, — кандидаты на удаление ссылок.

  2. Откройте найденные файлы и удалите остатки импорта:

    • Любые строки вида:
      xml
      <Import Project="packages\inteltbb.redist.win.2022.2.0.503\build\native\inteltbb.redist.win.targets" Condition="Exists('...')" /> <Import Project="packages\inteltbb.redist.win.2022.2.0.503\build\native\inteltbb.redist.win.props" Condition="Exists('...')" />
    • Весь блок:
      xml
      <Target Name="EnsureNuGetPackageBuildImports" ...> <PropertyGroup> <ErrorText>...</ErrorText> </PropertyGroup> <Error Condition="!Exists('packages\inteltbb.redist.win.2022.2.0.503\build\native\inteltbb.redist.win.targets')" Text="$(ErrorText)" /> </Target>

    Если у вас PackageReference, удалите ещё и

    xml
    <PackageReference Include="inteltbb.redist.win" Version="..." />

    Если packages.config — убедитесь, что там нет записи про inteltbb.redist.win.

  3. Проверьте глобальный user-props (очень частая причина!):

    • Откройте файл (замените x64 и x86 по необходимости):
      text
      %LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props %LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x86.user.props
      Если внутри есть импорт/пути к packages\inteltbb… — удалите.
    • Альтернатива из VS: View → Other WindowsProperty Manager → у корня проекта найдите Microsoft.Cpp.<Platform>.user и уберите лишние Property Sheets/пути.
  4. Проверьте решение (.sln):

    • Убедитесь, что TEST_FUNC.vcxproj действительно исключён из .sln (или удалён блок Project(...) для него). Иногда VS всё ещё пытается его строить по зависимостям.
  5. Жёсткая очистка артефактов:

    • Закройте VS.
    • Удалите каталоги: packages\ (если есть на уровне решения), .vs\, все bin\ и obj\ у проектов.
    • Очистите nuget-кэши (по желанию, не обязательно):
      text
      nuget locals all -clear :: или dotnet nuget locals all --clear
  6. Проверка через лог MSBuild (если ошибка всё ещё появляется):

    • Сгенерируйте подробный лог:
      msbuild YourDll.vcxproj /t:Rebuild /v:diag > build.log
      
      Потом:
      findstr /I /N "inteltbb.redist.win.targets" build.log
      
      По строкам рядом будет видно какой именно файл и какой импорт пытаются подцепить.
    • Или посмотрите «сплющенный» проект:
      msbuild YourDll.vcxproj /pp:pp.xml
      
      Откройте pp.xml и поищите inteltbb — это покажет откуда именно импорт приезжает (какой .props/.targets).

Почему ругается именно на TEST_FUNC.vcxproj

Скорее всего:

  • этот проект всё ещё подключён в .sln и содержит «ядовитый» EnsureNuGetPackageBuildImports;
  • либо он импортируется через общий Directory.Build.props/user.props и потому попадает в билд даже при сборке другой dll;
  • либо вы редактировали/удалили другую копию файла (проверьте полный путь, который пишет MSBuild в логе).

Быстрое «лекарство», если надо собрать прямо сейчас

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

  • все Import на inteltbb.*.props/targets;
  • весь Target Name="EnsureNuGetPackageBuildImports".

После этого сборка пройдёт, даже если пакетов нет.


Если хотите, скиньте сюда вывод из шага 6 (несколько строк вокруг найденного пути) — по нему я скажу, из какого файла это точно тянется и что именно удалить.

مشاركة هذا السؤال والجواب