Отсутствуют пакеты NuGet

Я искал эту проблему, но ни одно из решений не работал. У меня установлен Visual Studio Professional 2015, и я использую TFS. Моя версия NuGet-3.1.6. Эта проблема возникает только в моем проекте C# Web API/MVC.

Я получаю следующую ошибку:

этот проект ссылается на пакеты NuGet, которые отсутствуют в этом компьютер. Используйте NuGet Package Restore для их загрузки. For more информацию см. http://go.microsoft.com/fwlink/?LinkID=322105. В отсутствует файл .. пакетыMicrosoft.Сеть.Компиляторы.1.0.0buildMicrosoft.Сеть.Компиляторы.реквизит

  1. у меня нет .папка nuget в моих решениях.
  2. у меня есть папка пакетов в решении, и когда я удаляю ее, кажется, что NuGet перестраивает зависимости, но проект все еще имеет вышеуказанную ошибку.
  3. Я попытался удалить проект из TFS, и это не исправить он.
  4. наряду с вышеуказанной ошибкой все ссылки в проекте имеют желтые предупреждающие знаки и говорят, что они отсутствуют.
  5. когда я проверил Диспетчер пакетов NuGet для проекта, все, что "отсутствует", имеет зеленую галочку рядом с ним, включая Microsoft.Сеть.Компиляторы.
  6. Я попытался добавить новый проект Web API/MVC, и он столкнулся с аналогичной проблемой, когда большинство ссылок, таких как Owin, "отсутствовали" с желтым предупреждающим знаком.

25 ответов


У меня была та же ошибка (отсутствует точно такой же пакет) сегодня. Я также создал проект MVC + Web API.

Это произошло, потому что я переместил файлы приложений (включая.файл csproj) в другое место. Я вручную обновил .файл sln, но все зависимости пакетов теперь (Visual Studio 2015) хранятся в .файл csproj.

редактирование .файл csproj и исправление относительного пути к папке решения (которая содержит папку packages) решили проблему для мне.


Я решил свою проблему, удалив этот код из :

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

Если у вас есть еще один отсутствующий пакет nuget, который дает вашу ошибку при создании вашего решения, используйте следующую команду, используя консоль команд Nuget из Tools > NuGet Package Manager > консоль диспетчера пакетов. Он переустановит все текущие пакеты.

Update-Package-переустановить

остерегайтесь-это обновляет пакеты для всего решения, а не только для проекта.


У меня было это точное разочарование сообщение. Что, наконец, сработало для меня, это удаление всех файлов и папок внутри /packages и позволить VS повторно получить все следующую сборку.


Тибериу прав. Мне пришлось отредактировать свой .csproj файл, как файлы были перемещены и вызвали эту проблему

 <Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />

Я изменил вверху файла и внизу

<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />

Я решил эту проблему, удалив следующий код .файл csproj

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets'))" />


комбинация из 2 ответов сработала для меня. Сначала я изменил .файл csproj для удаления ссылки на версию 1.0.0

< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >

  ----Error---

< /Target>

и тогда

Update-Package -Reinstall

и это сработало.


просто включите восстановление пакета NuGet. щелкните правой кнопкой мыши решение > выберите "Включить восстановление пакета NuGet".

Right click your solution > choose 'Enable NuGet Package Restore'

Это создаст .из NuGet папку с NuGet.Config файл и исправлена моя проблема.


Я использую VS2012 и сталкиваюсь с той же ошибкой. Я удалил следующий целевой тег из .файл csproj и он начал компиляцию без каких-либо ошибок.

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  -- Error messages within Target Tag
</Target>

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

enter image description here


чтобы развернуть несколько ответов здесь, да, вы можете удалить следующий блок из своего .файл csproj:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

и это устраняет проблему, однако в моем случае я заметил, что у меня были дополнительные ссылки на .Сеть.Компиляторы И.граф CodeDOM.Провайдеры с разными версиями:

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.0.1
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\

когда мои пакеты.config ссылается только на следующее:

<package id="Microsoft.Net.Compilers" version="2.0.1"
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3"

удаление элементов 1.0.0 из .csproj файл Исправлена проблема.


для тех, кто спотыкается здесь с проблемой, которую я имел (некоторые, но не все пакеты восстанавливаются на сервере сборки), последний кусок головоломки для меня добавлял NuGet.config в корне моего решения, брат к .SLN файл, как Дэвид Эббо объяснил здесь: http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html.

из сообщения в блоге Ebbo, содержимое файла для меня просто

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

обновление:

URL-адрес API NuGet изменился для v3 (текущий по состоянию на сентябрь 2016 года). От https://www.nuget.org/

<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />

сообщение об ошибке-это совершенно правильно. Я испробовал все трюки, но ни один не сработал. Проект (простой тест веб-приложения MVC) переместился из сообщества Windows 8.1 VS 2015 в мое новое тестовое окно в Windows 10. Все последние обновления для VS 2015 применены. Я даже не смог установить более новую версию пакета компиляторов.

Loop:
<LOOP>This seems to be a Ground Hog Day phenomena.</LOOP>
GoTo Loop

Я, наконец, просто скопировал Microsoft.Сеть.Компиляторы.1.0.0 из старого проекта в новый, и это сработало. Затем я мог бы начать обновлять другие пакеты до более новая версия. Похоже на ошибку процесса обновления проекта nuget для меня.

Примечание: оригинальный проект был создан в VS 2015 и не имеет каких-либо устаревших методологий nuget.


решение, которое работает в моем случае-Visual Studio 2015 Enterprice, project .NET 4.6.1

  1. обновление 3
  2. установить инструменты веб-разработчика

Visual studio installation wizzard


для меня пакеты были там по правильному пути, но папки сборки внутри папки пакета не были. Я просто удалил все пакеты, которые, по его словам, отсутствовали, и перестроил решение, и оно успешно создало папки сборки и .файлы реквизита. Поэтому сообщения об ошибках были правильными, сообщая мне, что что-то было упущено.


Я не мог найти никаких решений для этого, поэтому я добавил копию nuget.exe и сценарий powershell в корневой каталог решения под названием prebuild.ps1 со следующим содержанием.

$nugetexe = 'nuget.exe'
$args = 'restore SOLUTION_NAME_HERE.sln'
Start-Process $nugetexe -ArgumentList $args

Я вызвал этот сценарий powershell в моей сборке в путь сценария предварительной сборки enter image description here


мой работал, когда я скопировал папку пакетов вместе с файлом решения и папкой проекта. Я просто не копировал папку packages с предыдущего места.


вы также можете использовать предлагаемое сообщение об ошибке в качестве подсказки. Вот как найти Управление пакетами для решения и нажмите на разрешение отсутствующего пакета nuget.

вот это


прокомментируйте параметр компилятора в WebConfig:

<!--<system.codedom>
<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
</system.codedom>-->

обновите последнюю версию пакетов в файле конфигурации пакета

  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.4" targetFramework="net452" />

перестроить, если все в порядке, не нужно продолжать, иначе Щелкните правой кнопкой мыши проект, нажмите "выгрузить проект" Щелкните правой кнопкой мыши проект еще раз и отредактировать .файл csproj

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

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />

как многие предложили удалить <Target> тег может сделать его компилируемым. Однако, остерегайтесь того, что он имеет побочный эффект, когда вы делаете это для тестовых проектов.

я получил ошибку, связанную с MSTest.TestAdapter пакет nuget во время компиляции. Решил эту проблему, удалив <Target> тег. Хотя это сделало сборку успешной,методы тестирования стали не обнаруживать. Проводник тестов не будет перечислять методы тестирования в этом проекте, а тестовый или отладочный тест также не будет работать.

I столкнулся с этим при использовании Visual Studio 2017 и .Net framework 4.7, это может очень хорошо произойти в других версиях


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

затем щелкните правой кнопкой мыши на решении и выберите "Восстановить пакеты NuGet" (что, вероятно, не требуется, если вы просто создадите его и позволите ему сделать это за вас), а затем выберите "Управление пакетами NuGet для решения", чтобы обновить все пакеты до новейшая версия.

Это было для решения примера приложения ASP MVC, загруженного с веб-сайта Microsoft.


для инженеров DevOps / build вы, вероятно, можете исправить этот запуск nuget restore против затронутого SLN или проекта, если вам не хватает SLN. Я должен сделать это для наших сборок CI/CD для всех наших проектов UWP.

  1. убедитесь, что NuGet установлен на ведомом устройстве сборки либо в Visual Studio, либо в автономном режиме. Если это последнее, убедитесь, что он находится в пути и пропустите шаг 2.
  2. либо откройте консоль vs Dev CMD, либо загрузите ее через уже открытую, что вы можете сделать с помощью инструкции ниже:
    VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat"
    или
    VS2017 call "%ProgramFiles(x86)%\Microsoft Visual Studio17\Enterprise\Common7\Tools\VsDevCmd.bat"
  3. call nuget restore MyStuff.SLN или call nuget restore MyStuff.csproj если нет SLN.

Не уверен, поможет ли это кому-нибудь, но у меня возникла эта проблема, когда я удалил исходный код с моей локальной машины, не сохранив файл решения в TFS. (Во время начальной разработки я щелкал правой кнопкой мыши и проверял проект в обозревателе решений, но забыл проверить само решение.) Когда мне нужно было работать над этим снова, все, что у меня было в TFS, было .файл csproj, нет .sln файл. Итак, в VS я сделал файл --> Source Control --> Advanced -- Open from Server и открыл .файл csproj. Оттуда я сделал сохранить все, и он спросил меня, где я хотел сохранить .sln файл. Я спасал это .sln-файл в каталог проекта с другими папками (App_Data, App_Start и т. д.), не каталог верхнего уровня. Я, наконец, понял, что мне нужно сохранить .файл sln папки из папки проекта, так это на том же уровне, что и папка проекта. Все мои пути разрешились, и я смог построить его снова.


у меня была эта проблема как неудачная сборка в Azure при развертывании из Git.

получается мой .гитюдного было, за исключением с ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props.

после build папка была (force) привержена Git, проблема была решена.


для меня мой файл gitignore игнорировал мою папку пакетов. Следующая строка gitignore вызывала проблему -

**/packages/*

удалено, и он восстановил папку "Мои пакеты". Надеюсь, это поможет кому-то еще.