Там есть подобный пост в стеке, но это не помогает с моей проблемой, возможно, потому что я использую Visual Studio 2015.
Как мне установить параметр "Включить восстановление пакета NuGet" в VS2015?
Я выбрал File > New Project и создал пустое веб-приложение ASP.NET. Я ищу этот вариант меню.
Я должен упомянуть, что я искал любые ранее существовавшие файлы nuGet в моей папке проекта, и их нет.
Это заняло слишком много времени, но я, наконец, нашел этот документ в Миграция решений MSBuild-Integrated для автоматического восстановления пакетов, и я смог решить проблему, используя описанные методы Вот.
'.nuget'
рядом с решениемnuget.targets
из ваших файлов .csproj
или .vbproj
. Хотя он официально не поддерживается, документ ссылается на PowerShell script, если у вас много проектов, которые необходимо очистить. Я вручную редактировал мои вручную, поэтому я не могу дать никаких отзывов о моем опыте с ним.При редактировании файлов вручную, вот что вы будете искать:
Файл решения (.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)
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<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>
Microsoft отказалась от поддержки "Включить восстановление пакета NuGet" в VS2015, и вам нужно внести некоторые изменения вручную, чтобы либо перенести старые решения, либо добавить эту функцию в новые решения. Новая функция хорошо описана в Восстановление пакета NuGet.
Существует также руководство по миграции существующих проектов (как уже упоминалось выше): Руководство по перенастройке NuGet
При обновлении:
При создании нового проекта:
Создайте файл в каталоге .nuget с именем nuget.config.
Добавьте 'nuget.config' в каталог решений, созданный на шаге 2.
Поместите следующий текст в файл nuget.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositorypath" value="$\..\..\..\..\Packages" />
</config>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
Этот файл конфигурации позволит вам объединить все ваши пакеты в одном месте, чтобы у вас не было 20 разных копий одного и того же пакета, плавающего в вашей файловой системе. Относительный путь будет изменяться в зависимости от архитектуры вашего каталога решений, но он должен указывать на каталог, общий для всех ваших решений.
Вам нужно перезапустить визуальную студию после выполнения шага 5. Nuget не будет распознавать изменения до тех пор, пока вы этого не сделаете.
Наконец, вам, возможно, придется использовать "Nuget Package Manager for Solutions" для удаления и последующей установки пакетов. Я не знаю, было ли это побочным эффектом Powershell script, я побежал или просто метод, чтобы снова запустить NuGet. Как только я сделал все эти шаги, моя сложная архитектура сборки безупречно работала над сбором новых пакетов, когда я проверял проекты из TFVC.
По желанию вы можете удалить все папки из папки "пакеты" и выбрать "Управление пакетами NuGet для решения...". В этом случае кнопка "Восстановить" появляется в пакетах NuGet Packages Windows.
Если у вас возникли проблемы или отсутствуют какие-либо пакеты, вы можете просто щелкнуть правой кнопкой мыши в своем проекте и выбрать " Управление пакетами NuGet для решения...". После нажатия на это откроется экран, в котором вы увидите панель меню с надписью "Restore":
Нажмите на него, и необходимые пакеты будут установлены автоматически.
Я считаю, что это то, что вы ищете, это решило мои проблемы.
Как уже упоминалось Майком, в 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
При обновлении проектов с пакетами nuget от Vx20XX до VS2015 может возникнуть проблема с пакетами nuget.
Пример сообщения об ошибке: Этот проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Включите восстановление пакета NuGet, чтобы загрузить их.
Обновление 2016-02-06: у меня была ссылка на информацию, но она больше не работает. Я подозреваю, что недавний путь решил проблему.
Я исправил свою проблему, написав небольшую программу, которая делает восстановление MSBuild-интегрированного пакета и автоматическое восстановление пакетов
Вы можете скачать исполняемый файл инструмента здесь.
Пожалуйста, дайте мне знать результат:-)!
Код в качестве ссылки:
<Window x:Class="FixNuGetProblemsInVs2015.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FixNuGetProblemsInVs2015"
mc:Ignorable="d"
Title="Fix NuGet Packages problems in Visual Studio 2015 (By Eric Ouellet)" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0">Root directory of projects</TextBlock>
<Grid Grid.Row="0" Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Name="DirProjects"></TextBox>
<Button Grid.Column="1" VerticalAlignment="Bottom" Name="BrowseDirProjects" Click="BrowseDirProjectsOnClick">Browse...</Button>
</Grid>
<!--<TextBlock Grid.Row="1" Grid.Column="0">Directory of NuGet Packages</TextBlock>
<Grid Grid.Row="1" Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Name="DirPackages"></TextBox>
<Button Grid.Column="1" Name="BrowseDirPackages" Click="BrowseDirPackagesOnClick">Browse...</Button>
</Grid>-->
<TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Name="TxtLog" IsReadOnly="True"></TextBox>
<Button Grid.Row="3" Grid.Column="0" Click="ButtonRevertOnClick">Revert back</Button>
<Button Grid.Row="3" Grid.Column="2" Click="ButtonFixOnClick">Fix</Button>
</Grid>
</Window>
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;
/// <summary>
/// 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
/// </summary>
namespace FixNuGetProblemsInVs2015
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
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<XElement> elementsToRemove = new List<XElement>();
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";
}
}
}
Перейдите в ссылку в visual studio и посмотрите, какие пакеты отсутствуют. Теперь щелкните правой кнопкой мыши на Solution in Visual и выберите открытую папку в проводнике файлов. Теперь откройте папку пакетов и удалите папку с отсутствующими пакетами. Откройте визуальную студию и просто создайте решение. все недостающие пакеты будут восстановлены. Пожалуйста, отметьте это как ответ, если я помог.
Я столкнулся с той же проблемой, пытаясь создать образец проекта gplus-quickstart-csharp-master.
Я внимательно посмотрел сообщение об ошибке и нашел обходной путь от преодоления этой ошибки, надеюсь, это поможет.
Наслаждайтесь!
Этот подход работал у меня:
Теперь вы включили восстановление пакета nuget в VS2015.
Я полагаю, что для проекта asp.net 4 мы переходим к автоматическому восстановлению, поэтому нет необходимости в этом. Для старых проектов я думаю, что потребуется немного работы для преобразования.
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
Закрыть VS. Удалите все под папкой пакетов. Откройте свое решение. Щелкните правой кнопкой мыши на своем проекте, выберите "Управление пакетами nuget...". Вы увидите желтую полосу вверху окна "Диспетчер пакетов Nuget", предлагая вам восстановить пакеты. Это сработало для меня.
Решение Ivan Branets - это, по сути, то, что исправлено для меня, но некоторые подробности могут быть разделены.
В моем случае я был в VS 2015, используя Автоматическое восстановление пакетов и TFS. Это все довольно обычное дело.
Проблема заключалась в том, что когда другой разработчик пытался получить решение от TFS, некоторые пакеты не полностью восстанавливались. (Почему, я еще не совсем уверен.) Но папка пакетов содержала папку для ссылки и пакет NuGet, но она не расширялась (скажем, папка lib, содержащая .dll, отсутствовала.) Эта половина там, но не совсем правильная концепция препятствовала восстановлению пакета.
Вы узнаете это, потому что ссылка будет иметь желтый восклицательный знак о том, что не будет разрешено.
Таким образом, решение удаления папки в пакетах устраняет проблему блокировки восстановления пакета. Затем вы можете щелкнуть правой кнопкой мыши на верхнем уровне решения, чтобы получить возможность восстановить пакеты, и теперь он должен работать.
Консоль диспетчера пакетов (Visual Studio, Tools > Диспетчер пакетов NuGet > Консоль диспетчера пакетов): запустите команду Update-Package -reinstall -ProjectName, где указано название затронутого проекта, как оно показано в обозревателе решений. Используйте Update-Package -reinstall самостоятельно, чтобы восстановить все пакеты в решении. См. Пакет обновления. Вы также можете переустановить один пакет.
from https://docs.microsoft.com/en-us/nuget/quickstart/restore
Я использовал msbuild/t:restore
.
Моя проблема была с MSBuild, поэтому я перешел по ссылке @Vinney Kelly: перенос интегрированных с MSBuild решений на автоматическое восстановление пакетов
а также...
Это сработало LIKE A CHARM =]
MSBuild: используйте команду
msbuild/t:restore
, которая восстанавливает пакеты, перечисленные в файле проекта (только PackageReference). Доступно только в NuGet 4. x+ и MSBuild 15. 1+, которые включены в Visual Studio 2017.nuget restore
иdotnet restore
оба используют эту команду для соответствующих проектов.
Также может быть результатом запуска программы во время установки пакета. он неактивен, если вы попытаетесь щелкнуть его, когда встроенный IIS работает в фоновом режиме.
Используйте эту команду для восстановления всех пакетов
dotnet restore
Для проектов.NET Core выполните dotnet restore
или dotnet build
в NuGet Package Manager Console
(которая автоматически запускает восстановление)
Вы можете запустить консоль из
Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера пакетов
Помог мне через Tools >>> Nuget Package Manager >>> General then tick option Позволяет Nuget загружать отсутствующий пакет и автоматически проверять отсутствующие пакеты во время сборки в visual studio.
Если кто-то еще обнаружит эту проблему в Visual Studio 2017, убедитесь, что проект открыт файлом .sln, а не папкой, поскольку визуальная студия не будет выбирать настройки, если она открывается папкой. Это происходит по умолчанию, если вы используете онлайн-службы Visual Studio для git.
Мне пришлось удалить пакетную папку для закрытия и повторного открытия (VS2015). Я не переносился, и у меня не было пакетов, проверенных в исходном контроле. Все, что я могу сказать, это что-то испортилось, и это зафиксировало это.
Еще проще, добавьте папку .nuget в ваше решение и появится "Restore Nuget Packages" (не уверен, должен ли nuget.exe присутствовать, чтобы он работал).