Как включить восстановление пакета NuGet в Visual Studio?
В стеке есть аналогичная запись, но это не помогает с моей проблемой, потому что я использую Visual Studio 2015.
Как установить параметр «Включить восстановление пакета NuGet» в VS2015?
Я выбрал File> New Project и создал пустое веб-приложение ASP.NET . Я ищу этот пункт меню.
- Как повысить производительность версии 1.58.0 с помощью Visual Studio 2015 (Enterprise)
- Возможно, ошибка компилятора C # в Visual Studio 2015
- ASP.NET 5 добавить ссылку службы WCF
- Ошибка установки Visual Studio 2015 Enterprise Update 1 с Team Explorer
- Каталог проекта Visual Studio 2015 Database Project содержит файл с расширением jfm
Я должен упомянуть, что я искал любые ранее существовавшие файлы nuGet в моей папке проекта, и их нет.
- Visual Studio 2015 не выделяет синтаксис бритвой или Intellisense
- CMake не находит компилятор Visual C ++
- VS 2015. Настройка правильной целевой структуры для веб-проекта ASP.NET 5
- Публикация сайта без roslyn
- Как использовать c # 7 с Visual Studio 2015?
- Ошибка отладки! Выражение: __acrt_first_block == header
- Свойство 'map' не существует в типе 'Observable '
- выпадающий список имени имени и имени classа отсутствует (настройка визуальной студии)
Это заняло слишком много времени, но я наконец нашел этот документ в разделе «Перенос решений MSBuild-Integrated для автоматического восстановления пакетов», и я смог решить проблему, используя описанные здесь методы.
- Удалите директорию решений
'.nuget'
вместе с решением - Удалите все ссылки на
nuget.targets
из файлов.csproj
или.vbproj
. Хотя он официально не поддерживается, документ ссылается на скрипт PowerShell, если у вас есть много проектов, которые необходимо очистить. Я вручную редактировал мои руки, поэтому я не могу дать никаких отзывов о моем опыте с ним.
При редактировании файлов вручную, вот что вы будете искать:
Файл решения (.sln)
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F4AEBB8B-A367-424E-8B14-F611C9667A85}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.Config = .nuget\NuGet.Config .nuget\NuGet.exe = .nuget\NuGet.exe .nuget\NuGet.targets = .nuget\NuGet.targets EndProjectSection EndProject
Файл проекта (.csproj / .vbproj)
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}.
Microsoft отказалась от поддержки «Включить восстановление пакета NuGet» в VS2015, и вам нужно внести некоторые изменения вручную, чтобы либо перенести старые решения, либо добавить эту функцию в новые решения. Новая функция хорошо описана в NuGet Package Restore .
Существует также руководство по миграции для существующих проектов (как упоминалось ранее): Руководство по перенастройке NuGet
При обновлении:
- не удаляйте каталог .nuget.
- Удалите файлы nuget.exe и nuget.targets.
- Оставьте файл nuget.config.
- Очистите каждый файл проекта любой ссылкой на цели NuGet вручную. Сценарий Powershell, похоже, наносил больше урона, чем пользы.
При создании нового проекта:
- В своем решении Visual Studio 2015 создайте каталог решений под названием .nuget.
- Создайте фактический каталог каталога решений (где находится файл .sln) и назовите его .nuget (обратите внимание, что каталог решений не совпадает с фактическим каталогом файловой системы, хотя они имеют одинаковое имя).
-
Создайте файл в каталоге .nuget с именем nuget.config.
-
Добавьте ‘nuget.config’ в каталог решений, созданный на шаге 2.
-
Поместите следующий текст в файл nuget.config:
Этот файл конфигурации позволит вам консолидировать все ваши пакеты в одном месте, чтобы у вас не было 20 разных копий одного и того же пакета, плавающего в вашей файловой системе. Относительный путь будет изменяться в зависимости от архитектуры вашего каталога решений, но он должен указывать на каталог, общий для всех ваших решений.
Вам необходимо перезапустить визуальную студию после выполнения шага 5. Nuget не будет распознавать изменения до тех пор, пока вы этого не сделаете.
Наконец, вам, возможно, придется использовать «Nuget Package Manager for Solutions» для удаления и последующей установки пакетов. Я не знаю, был ли это побочным эффектом сценария Powershell, который я запускал, или просто метод, чтобы снова запустить NuGet. Как только я сделал все эти шаги, моя сложная архитектура сборки безупречно работала над сбором новых пакетов, когда я проверял проекты из TFVC.
При желании вы можете удалить все папки из папки «пакеты» и выбрать «Управление пакетами NuGet для решения …». В этом случае кнопка «Восстановить» появляется в пакетах NuGet Packages Windows.
Если у вас возникли проблемы или отсутствуют какие-либо пакеты, вы можете просто щелкнуть правой кнопкой мыши в своем проекте и выбрать « Управление пакетами NuGet для решения … ». После нажатия на это откроется экран, в котором вы увидите панель меню с надписью «Restore»:
Нажмите на нее, и необходимые пакеты будут установлены автоматически.
Я считаю, что это то, что вы ищете, это решило мои проблемы.
При обновлении проектов с пакетами nuget от Vx20XX до VS2015 может возникнуть проблема с пакетами nuget.
Пример сообщения об ошибке: этот проект ссылается на пакеты (ы) NuGet, отсутствующие на этом компьютере. Включите восстановление пакета NuGet, чтобы загрузить их.
Обновление 2016-02-06: У меня была ссылка на информацию, но она больше не работает. Я подозреваю, что недавний путь решил проблему ???
Я исправил свою проблему, написав небольшую программу, которая выполняет восстановление пакета MSBuild-Integrated vs. Automatic Package Restore
Вы можете скачать исполняемый файл здесь .
Пожалуйста, дайте мне знать результат :-)!
Код в качестве ссылки:
Root directory of projects using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Xml; using System.Xml.Linq; using Application = System.Windows.Application; using MessageBox = System.Windows.MessageBox; /// /// Applying recommanded modifications in section : "MSBuild-Integrated package restore vs. Automatic Package Restore" /// of : http://docs.nuget.org/Consume/Package-Restore/Migrating-to-Automatic-Package-Restore /// namespace FixNuGetProblemsInVs2015 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DirProjects.Text = @"c:\prj"; // DirPackages.Text = @"C:\PRJ\NuGetPackages"; } private void BrowseDirProjectsOnClick(object sender, RoutedEventArgs e) { FolderBrowserDialog dlg = new FolderBrowserDialog(); dlg.SelectedPath = DirProjects.Text; if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { DirProjects.Text = dlg.SelectedPath; } } //private void BrowseDirPackagesOnClick(object sender, RoutedEventArgs e) //{ // FolderBrowserDialog dlg = new FolderBrowserDialog(); // dlg.SelectedPath = DirPackages.Text; // if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) // { // DirPackages.Text = dlg.SelectedPath; // } //} // private string _dirPackages; private void ButtonFixOnClick(object sender, RoutedEventArgs e) { DoJob(false); } private void ButtonRevertOnClick(object sender, RoutedEventArgs e) { DoJob(true); } private void DoJob(bool revert = false) { TxtLog.Text = ""; string dirProjects = DirProjects.Text; // _dirPackages = DirPackages.Text; if (!Directory.Exists(dirProjects)) { MessageBox.Show("Projects directory does not exists: " + dirProjects); return; } //if (!Directory.Exists(_dirPackages)) //{ // MessageBox.Show("Packages directory does not exists: " + _dirPackages); // return; //} RecurseFolder(dirProjects, revert); } private void RecurseFolder(string dirProjects, bool revert = false) { if (revert) { Revert(dirProjects); } else { FixFolder(dirProjects); } foreach (string subfolder in Directory.EnumerateDirectories(dirProjects)) { RecurseFolder(subfolder, revert); } } private const string BackupSuffix = ".fix_nuget_backup"; private void Revert(string dirProject) { foreach (string filename in Directory.EnumerateFiles(dirProject)) { if (filename.ToLower().EndsWith(BackupSuffix)) { string original = filename.Substring(0, filename.Length - BackupSuffix.Length); if (File.Exists(original)) { File.Delete(original); } File.Move(filename, original); Log("File reverted: " + filename + " ==> " + original); } } } private void FixFolder(string dirProject) { BackupFile(System.IO.Path.Combine(dirProject, "nuget.targets")); BackupFile(System.IO.Path.Combine(dirProject, "nuget.exe")); foreach (string filename in Directory.EnumerateFiles(dirProject)) { if (filename.ToLower().EndsWith(".csproj")) { FromProjectFileRemoveNugetTargets(filename); } } } private void BackupFile(string path) { if (File.Exists(path)) { string backup = path + BackupSuffix; if (!File.Exists(backup)) { File.Move(path, backup); Log("File backup: " + backup); } else { Log("Project has already a backup: " + backup); } } } private void FromProjectFileRemoveNugetTargets(string prjFilename) { XDocument xml = XDocument.Load(prjFilename); List elementsToRemove = new List (); foreach (XElement element in xml.Descendants()) { if (element.Name.LocalName == "Import") { var att = element.Attribute("Project"); if (att != null) { if (att.Value.Contains("NuGet.targets")) { elementsToRemove.Add(element); } } } if (element.Name.LocalName == "Target") { var att = element.Attribute("Name"); if (att != null && att.Value == "EnsureNuGetPackageBuildImports") { elementsToRemove.Add(element); } } } if (elementsToRemove.Count > 0) { elementsToRemove.ForEach(element => element.Remove()); BackupFile(prjFilename); xml.Save(prjFilename); Log("Project updated: " + prjFilename); } } private void Log(string msg) { TxtLog.Text += msg + "\r\n"; } } }
Как уже упоминалось Майком, в VS2015 нет опции «Включить восстановление пакета NuGet». Вам придется вызвать процесс восстановления вручную. Хороший способ – без использования файлов и каталогов – использует консоль управления пакетами NuGet : щелкните в поле «Быстрый старт» (обычно в правом верхнем углу), введите console
, откройте консоль управления и введите команду:
Update-Package –reinstall
Это приведет к переустановке всех пакетов всех проектов в вашем решении. Чтобы указать один проект, введите:
Update-Package –reinstall -ProjectName MyProject
Конечно, это необходимо только тогда, когда кнопка Restore
, иногда предлагаемая VS2015, недоступна. Более полезные команды обновления перечислены и описаны здесь: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
Перейдите по ссылке в visual studio и посмотрите, какие пакеты отсутствуют. Теперь щелкните правой кнопкой мыши на Solution in Visual и выберите открытую папку в проводнике файлов. Теперь откройте папку пакетов и удалите папку с отсутствующими пакетами. Откройте визуальную студию и просто создайте решение. все недостающие пакеты будут восстановлены. Пожалуйста, отметьте это как ответ, если я помогу.
Я полагаю, что для проекта asp.net 4 мы переходим к автоматическому восстановлению, поэтому нет необходимости в этом. Для старых проектов я думаю, что потребуется немного работы для преобразования.
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
Этот подход работал для меня:
- Закрыть VS2015
- Временно откройте решение в VS2013 и включите восстановление пакета nuget, щелкнув правой кнопкой мыши на решении (я также сделал пересоздание, но я подозреваю, что это не нужно).
- Закрыть VS2013
- Повторно открыть решение в VS2015
Теперь вы включили восстановление пакета nuget в VS2015.
Я столкнулся с такой же проблемой, пытаясь создать образец проекта gplus-quickstart-csharp-master .
Я внимательно посмотрел сообщение об ошибке и нашел обходной путь от преодоления этой ошибки, надеюсь, это поможет.
- Щелкните правой кнопкой мыши файл решения и откройте в проводнике Windows.
- Скопируйте папку .nuget с NuGet.Config, NuGet.exe, NuGet.targets ( ссылку для загрузки или просто скопируйте из другого проекта и замените)
- Попробуйте перестроить решение.
Наслаждаться !!
Решение Ivan Branets – это, по сути, то, что исправлено для меня, но некоторые подробности можно было бы разделить.
В моем случае я был в VS 2015, используя восстановление Auto Package и TFS . Это все по-умолчанию.
Проблема заключалась в том, что когда другой разработчик пытался получить решение от TFS, некоторые пакеты не полностью восстанавливались. (Почему, я еще не совсем уверен.) Но папка пакетов содержала папку для ссылки и пакет NuGet, но она не расширялась (скажем, папка lib, содержащая .dll, отсутствовала.) Эта половина там, но на самом деле не совсем правильная концепция препятствовала восстановлению пакета.
Вы узнаете это, потому что ссылка будет иметь желтый восклицательный знак о том, что он не будет разрешен.
Таким образом, решение об удалении папки внутри пакетов устраняет проблему блокировки восстановления пакета. Затем вы можете щелкнуть правой кнопкой мыши на верхнем уровне решения, чтобы получить возможность восстановления пакетов , и теперь это должно сработать.
Закрыть VS. Удалите все под папкой пакетов. Откройте свое решение. Щелкните правой кнопкой мыши на своем проекте, выберите «Управление пакетами nuget …». Вы увидите желтую полосу вверху windows «Диспетчер пакетов Nuget», предлагая вам восстановить пакеты. Это сработало для меня.
Консоль диспетчера пакетов (Visual Studio, Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера пакетов): запустите команду Update-Package -reinstall -ProjectName, где указано название затронутого проекта, как оно отображается в обозревателе решений. Используйте Update-Package -reinstall самостоятельно, чтобы восстановить все пакеты в решении. См. Пакет обновления. При желании вы также можете переустановить один пакет.
Также может быть результатом запуска программы во время установки пакета. он неактивен, если вы попытаетесь щелкнуть его, когда встроенный IIS работает в фоновом режиме.
Мне пришлось удалить пакетную папку и повторно открыть (VS2015) решение. Я не переносился, и у меня не было пакетов, проверенных в исходном контроле. Все, что я могу сказать, что-то перепуталось, и это зафиксировало это.
Если кто-то еще обнаружит эту проблему в Visual Studio 2017, убедитесь, что проект открыт файлом .sln, а не папкой, так как визуальная студия не получит настройки, если она открыта папкой. Это происходит по умолчанию, если вы используете онлайн-службы Visual Studio для git.
Я использовал msbuild /t:restore
.
Моя проблема была в MSBuild Итак, я последовал за ссылкой @Vinney Kelly : Перенос решений MSBuild-Integrated в автоматическое восстановление пакетов
а также…
Это сработало LIKE CHARM =]
MSBuild : используйте команду
msbuild /t:restore
, которая восстанавливает пакеты пакетов, перечисленные в файле проекта (только PackageReference ). Доступно только в NuGet 4.x + и MSBuild 15.1+, которые входят в состав Visual Studio 2017 .nuget restore
dotnet restore
используют эту команду для соответствующих проектов.
Помог мне через Tools >>> Nuget Package Manager >>> General then tick option Позволяет Nuget загружать отсутствующий пакет и автоматически проверять отсутствующие пакеты во время сборки в visual studio .
Еще проще, добавьте папку .nuget в ваше решение и появится «Restore Nuget Packages» (не уверен, должен ли nuget.exe присутствовать, чтобы он работал).