Пакеты NuGet отсутствуют
Я искал эту проблему, но ни одно из решений не работало. У меня установлен Visual Studio Professional 2015, и я использую TFS. Версия моего NuGet - 3.1.6. Эта проблема происходит только в моем проекте С# Web API/MVC.
Я получаю следующую ошибку:
Этот проект ссылается на пакеты NuGet, отсутствующие на этом компьютер. Используйте NuGet Package Restore, чтобы загрузить их. Для большего информацию см. http://go.microsoft.com/fwlink/?LinkID=322105. отсутствующий файл..\пакеты\Microsoft.Net.Compilers.1.0.0\построить\Microsoft.Net.Compilers.props
- У меня нет папки .nuget в моих решениях.
- У меня есть пакетная папка в решении, и когда я его удаляю, кажется, что NuGet выполняет пересоздание зависимостей, но проект по-прежнему имеет указанную выше ошибку.
- Я попытался удалить проект из TFS, и он не исправил его.
- Наряду с вышеуказанной ошибкой все ссылки в проекте имеют желтые предупреждающие знаки и говорят, что они отсутствуют.
- Когда я проверил диспетчер пакетов NuGet для проекта, все, что "отсутствует", рядом с ним имеет зеленый галочку, включая Microsoft.Net.Compilers.
- Я попытался добавить новый проект Web API/MVC и столкнулся с аналогичной проблемой, когда большинство ссылок, таких как Owin, "отсутствовали" с желтым предупреждающим знаком.
Ответы
Ответ 1
Сегодня у меня была такая же ошибка (отсутствует точно такой же пакет). Я также создал проект MVC + Web API.
Это произошло потому, что я перенес файл приложения (включая файл .csproj) в другое место. Я вручную обновил файл .sln, но теперь все зависимости пакетов (Visual Studio 2015) хранятся в файле .csproj.
Редактирование файла .csproj и исправление относительного пути к папке решения (содержащей папку с папками) решили проблему для меня.
Ответ 2
Я решил проблему, удалив этот код из файла .csproj
:
<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>
Ответ 3
ВНИМАНИЕ - это обновление пакетов для всего решения, а не только для проекта.
Если у вас есть еще один отсутствующий пакет nuget, который выдает ошибку при создании решения, используйте следующую команду, используя Консоль команд Nuget, из меню Инструменты> Диспетчер пакетов Nuget> Консоль диспетчера пакетов. Он переустановит все ваши текущие пакеты.
Update-Package –reinstall
Обновление:
Вы можете передать конкретное имя проекта в качестве параметра.
Update-Package –reinstall -ProjectName SampleApp
Ответ 4
Я имел это точное расстраивает сообщение. Что, наконец, работало для меня, это удаление всех файлов и папок внутри/пакетов, а также возможность повторной загрузки VS всей следующей сборки.
Ответ 5
Тибериу правильный. Мне пришлось изменить файл .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'))" />
Ответ 6
Я решил эту проблему, удалив следующий код из файла .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'))" />
Ответ 7
Сочетание двух ответов сработало для меня. Сначала я изменил файл .csproj, чтобы удалить ссылку на версию 1.0.0.
< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >
----Error---
< /Target>
а затем сделал
Update-Package -Reinstall
и он работал.
Ответ 8
Так я решил мою ошибку: чтобы открыть файл .csproj для обновления в Visual Studio 2015+ Solution Explorer:
Щелкните правой кнопкой мыши имя проекта → Выгрузить проект
Щелкните правой кнопкой мыши имя проекта → Изменить .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('..\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.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\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.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
Щелкните правой кнопкой мыши имя проекта → Обновить проект
Наконец, постройте свое решение.
Ответ 9
Просто включите восстановление пакета NuGet.
Щелкните правой кнопкой мыши свое решение> выберите "Включить восстановление пакета NuGet".
![Right click your solution > choose 'Enable NuGet Package Restore']()
Это создаст папку .nuget с файлом NuGet.Config и исправит мою проблему.
Ответ 10
Я использую VS2012 и сталкиваюсь с той же ошибкой. Я удалил следующий тег Target из файла .csproj и начал компиляцию без каких-либо ошибок.
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-- Error messages within Target Tag
</Target>
Ответ 11
Для меня проблема была в том, что когда я копировал решение в новую папку и открывал ее, в ней отсутствовала папка Nuget, как показано ниже. Я скопировал эту папку и все заработало. Примечание. Эта же папка находилась в нашем контроле исходного кода, но не в этом проекте решений, это была одна папка.
![enter image description here]()
Ответ 12
Чтобы развернуть несколько ответов, да, вы можете удалить следующий файл из файла .csproj:
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
и это устраняет проблему, однако в моем случае я заметил, что у меня есть дополнительные ссылки на .NET.Compilers и .CodeDom.Providers с разными версиями:
<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\
Когда my packages.config ссылается только на следующее:
<package id="Microsoft.Net.Compilers" version="2.0.1"
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3"
Удаление элементов 1.0.0 из файла .csproj устраняет проблему.
Ответ 13
Для всех, кто сталкивается здесь с проблемой, которую я имел (некоторые, но не все пакеты восстанавливаются на сервере сборки), последний фрагмент головоломки для меня заключался в добавлении 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>
UPDATE:
URL-адрес API NuGet изменился для v3 (текущий по состоянию на сентябрь 2016 года). Из https://www.nuget.org/
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
Ответ 14
Сообщение об ошибке полностью корректно. Я пробовал все трюки, и никто не работал. Проект (простой тест MVC Web App) перенесен из Windows 8.1 VS 2015 Community в новый тестовый ящик в Windows 10. Были применены все последние обновления VS 2015.
Я даже не мог установить новую версию пакета компиляторов.
Loop:
<LOOP>This seems to be a Ground Hog Day phenomena.</LOOP>
GoTo Loop
Я, наконец, просто скопировал Microsoft.Net.Compilers.1.0.0 из старого проекта в новый, и он сработал.
Затем я мог бы начать обновлять другие пакеты до более новой версии.
Похож на ошибку процесса обновления проекта nuget.
ПРИМЕЧАНИЕ. Оригинальный проект был создан в VS 2015 и не имеет никаких устаревших методологий nuget.
Ответ 15
Решение, которое работает в моем случае - Visual Studio 2015 Enterprice, проект .NET 4.6.1
- Обновление до обновления 3
- Установить инструменты веб-разработчика
![Визуальная установка установки студии]()
Ответ 16
Для меня пакеты были там по правильному пути, но папок сборки внутри папки пакета не было. Я просто удалил все пакеты, которые, по его словам, отсутствовали, и пересобрал решение, и он успешно создал папки сборки и файлы.props. Таким образом, сообщения об ошибках были правильными, сообщая мне, что что-то было пропущено.
Ответ 17
У меня была эта проблема как неудачная сборка в Azure при развертывании из Git.
Оказывается, мой.gitignore исключал папку build
из ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props
.
Как только папка build
была (принудительно) передана в Git, проблема была решена.
Ответ 18
Я не мог найти решения для этого, поэтому я добавил копию файла nuget.exe и powershell script в корневую директорию решения с именем prebuild.ps1 со следующим содержимым.
$nugetexe = 'nuget.exe'
$args = 'restore SOLUTION_NAME_HERE.sln'
Start-Process $nugetexe -ArgumentList $args
Я вызвал эту powershell script в моей сборке в Pre-Build script path ![введите описание изображения здесь]()
Ответ 19
Моя работа работала, когда я скопировал папку с папкой решения и папку проекта. Я просто не копировал папку с предыдущего места.
Ответ 20
Вы также можете использовать предлагаемое сообщение об ошибке как подсказку. Здесь, как найти пакет управления пакетами для решения, и щелкните по адресу, где отсутствует пакет nuget.
Что он
Ответ 21
Прокомментировать вариант компилятора в 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=\"Web\" /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')" />
Ответ 22
Как многие предложили удалить тег <Target>
, он может сделать его компилируемым. Тем не менее, остерегайтесь того, что это имеет побочный эффект, когда вы делаете это для тестовых проектов.
При компиляции я получил ошибку, связанную с пакетом MSTest.TestAdapter
nuget. Решена эта проблема, удалив тег <Target>
. Несмотря на то, что он сделал успешную сборку, методы тестирования стали недоступными для поиска. Тест-проводник не будет перечислять методы тестирования в этом проекте, а тест проб или отладки не будет работать.
Я столкнулся с этим при использовании Visual Studio 2017
и .Net framework 4.7
, это может произойти в других версиях
Ответ 23
Проблема для меня заключалась в том, что NuGet не мог автоматически получать/обновлять пакеты, потому что полный путь к файлу был бы слишком большим. Исправлено перемещением моего решения в папку в моих документах вместо глубоко вложенной папки.
Затем можно щелкнуть правой кнопкой мыши по решению и выбрать "Восстановить пакеты NuGet" (что, вероятно, не обязательно, если вы просто создаете его и позволяете ему делать это за вас), а затем выберите "Управление пакетами NuGet для решения", чтобы получить все пакеты обновлены до последней версии.
Это было решение для примера приложения ASP MVC, загруженного с веб-сайта Microsoft.
Ответ 24
Для разработчиков DevOps/build, вы, вероятно, можете исправить это текущее nuget restore
против затронутого SLN или проекта, если у вас нет SLN. Я должен сделать это для наших сборок CI/CD для всех наших проектов UWP.
- Убедитесь, что nuget установлен на ведомой сборке либо в Visual Studio, либо в автономном режиме. Если это последнее, убедитесь, что это в ПУТИ и пропустите шаг 2.
- Либо откройте консоль VS Dev CMD, либо загрузите ее через уже открытую консоль, что можно сделать с помощью приведенных ниже инструкций:
VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat"
или же
VS2017 call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
-
call nuget restore MyStuff.SLN
или call nuget restore MyStuff.csproj
если SLN отсутствует.
Ответ 25
Не уверен, поможет ли это кому-нибудь, но у меня возникла эта проблема, когда я удалил исходный код со своего локального компьютера, даже не сохранив файл решения в TFS. (Во время первоначальной разработки я щелкал правой кнопкой мыши и проверял проект в обозревателе решений, но забыл когда-либо проверять само решение.) Когда мне нужно было снова поработать над этим, все, что у меня было в TFS, это файл.csproj, Нет.SLN файл. Поэтому в VS я сделал Файл → Контроль исходного кода → Дополнительно - Открыть с сервера и открыл файл.csproj. Оттуда я сделал Save All, и он спросил меня, где я хочу сохранить файл.sln. Я сохранял этот файл.sln в каталоге проекта с другими папками (App_Data, App_Start и т.д.), А не с каталогом верхнего уровня. Наконец я понял, что мне нужно сохранить файл.sln в каталоге из папки проекта, чтобы он находился на том же уровне, что и папка проекта. Все мои пути решены, и я смог построить его снова.
Ответ 26
Для меня мой файл gitignore игнорировал папку с пакетами. Следующая строка gitignore вызывала проблему -
**/packages/*
Удалил и восстановил папку с моими пакетами. Надеюсь, это поможет кому-то еще.
Ответ 27
Я получил исправление этой ошибки, на самом деле у меня была другая версия MSTest.TestAdapter(1.3.2) в моей папке пакетов и в.csproj ссылки на файл указывали на MSTest.TestAdapter(1.1.0). Я заменил все MSTest.TestAdapter(1.1.0) на MSTest.TestAdapter(1.3.2), и это решило мою проблему.
Ответ 28
Я понимаю, что этот вопрос старый, однако сегодня я столкнулся с такой же ситуацией и хотел добавить свои 2 цента для тех, кто недавно нашел эту проблему. Проект ASP MVC, который я вручную переместил в подпапку в своем решении, а затем удалил и добавил в решение, используя Visual Studio 2017, выдавал указанную ошибку. Перемещение папок "lib" и "packages" в корень той же подпапки, что и проект MVC, решило мою проблему.
Ответ 29
У меня возникла та же проблема, оказалось, что один из проектов, на которые я ссылался, находился за пределами каталога решения (и поэтому не использовал одну и ту же папку '/packages'). Решение, которое работало для меня, состояло в том, чтобы открыть эталонное проектное решение и построить его там. Как только этот проект был построен, ошибки исчезли.
Ответ 30
Папка в моем решении была названа ".NET Project". Переименовав его в "NET Project" все работало нормально. Таким образом, точка в начале была плохой идеей.