Comment activer la restauration de paquet NuGet dans Visual Studio?
il y a un post similaire sur stack mais cela n'aide pas avec mon problème probablement parce que j'utilise Visual Studio 2015.
Comment faire pour que l'option "Activer la restauration du paquet NuGet" apparaisse dans VS2015?
j'ai choisi Fichier > Nouveau projet et créé un vide ASP.NET Application Web . Je suis à la recherche de cette option de menu.
je dois mentionner que j'ai cherché tous les fichiers nuGet préexistants dans mon dossier de projet et il n'y en a aucun.
19 réponses
cela a pris beaucoup trop de temps, mais j'ai finalement trouvé ce document sur migration des solutions intégrées MSBuild vers la restauration automatique du paquet et j'ai pu résoudre le problème en utilisant les méthodes décrites ici.
- supprimer le répertoire de solutions
'.nuget'
le long de la solution - supprimer toutes les références à
nuget.targets
dans vos fichiers.csproj
ou.vbproj
. Mais pas officiellement pris en charge, le document renvoie à un script PowerShell si vous avez beaucoup de projets qui doivent être nettoyés. J'ai édité les miennes à la main, donc je ne peux pas donner de feedback concernant mon expérience avec.
lorsque vous éditez vos fichiers à la main, voici ce que vous recherchez:
Solution File (.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
Dossier De Projet (.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 a abandonné la prise en charge de la restauration 'Enable NuGet Package Restore' dans VS2015 et vous devez faire quelques modifications manuelles pour soit migrer d'anciennes solutions ou ajouter la fonctionnalité à de nouvelles solutions. La nouvelle fonctionnalité est décrite assez bien dans Restauration du paquet NuGet .
il y a aussi un guide de migration pour les projets existants (comme mentionné précédemment) ici: NuGet Guide de Migration
Lors de la mise à niveau:
- ne pas supprimer le .nuget répertoire.
- supprimer le nuget.exe et nuget.objectifs de fichiers.
- quitter le nuget.config.
- purgez à la main chacun des fichiers du projet de toute référence aux cibles NuGet. Le script Powershell mentionné semblait faire plus de dégâts que de bien.
lors de la création d'un nouveau projet:
- dans votre solution Visual Studio 2015, créez un répertoire de solutions appelé .nuget.
- créer un répertoire réel du répertoire solution (où le .SLN file lives) et l'appeler .nuget (notez que le répertoire solution n'est pas le même que le répertoire du système de fichiers même s'ils ont le même nom).
-
Créer un fichier dans le .l'annuaire nuget s'appelle nuget.config.
-
ajouter le" nuget.config' à la solution répertoire créé à l'étape #2.
-
placez le texte suivant dans le nuget.fichier de configuration:
<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositorypath" value="$\..\..\..\..\Packages" /> </config> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>
ce fichier de configuration vous permettra de regrouper tous vos paquets en un seul endroit afin que vous n'ayez pas 20 copies différentes du même paquet flottant sur votre système de fichiers. Le chemin relatif changera en fonction de l'architecture du répertoire de votre solution, mais il devrait pointer vers un répertoire commun à toutes vos solutions.
Vous devez redémarrer visual studio après avoir fait l'étape 5. Nuget ne reconnaîtra les changements que si vous le faites.
enfin, vous devrez peut-être utiliser le 'Nuget Package Manager for Solutions' pour désinstaller puis réinstaller les paquets. Je ne sais pas si c'était un effet secondaire de l'Powershell un script que j'ai lancé ou juste une méthode pour remettre NuGet en route. Une fois que j'ai fait toutes ces étapes, mon architecture de construction compliquée a fonctionné parfaitement pour faire tomber de nouveaux paquets lorsque j'ai vérifié des projets de TFVC.
en option, vous pouvez supprimer tous les dossiers du dossier" paquets "et sélectionner" Gérer les paquets NuGet pour Solution...". Dans ce cas, le bouton" Restaurer " apparaît sur les fenêtres des paquets NuGet.
si vous avez des problèmes ou s'il vous manque des paquets, vous pouvez simplement cliquer avec le bouton droit de la souris sur votre projet et sélectionner " Gérer les paquets NuGet pour Solution... ". Après avoir cliqué sur ce un écran s'ouvrira où vous voyez une barre de menu disant " restaurer":
Cliquez dessus et les paquets nécessaires seront installés automatiquement.
Je crois que c'est ce que vous cherchez, cela a résolu mon problème.
comme déjà mentionné par Mike, il n'y a pas d'option "Activer la restauration du paquet NuGet" dans VS2015. Vous devrez appeler le processus de restauration manuellement. Une bonne façon - sans toucher aux fichiers et aux répertoires - est d'utiliser la Console de gestion des paquets NuGet : cliquez dans le champ "démarrage rapide" (habituellement dans le coin supérieur droit), entrez console
, ouvrez la console de gestion, et entrez la commande:
Update-Package –reinstall
cela va ré-installer tous paquets de tous les projets de votre solution. Pour spécifier un seul projet, entrez:
Update-Package –reinstall -ProjectName MyProject
bien sûr, cela n'est nécessaire que lorsque le bouton Restore
- parfois offert par VS2015 - n'est pas disponible. Des commandes de mise à jour plus utiles sont listées et expliquées ici: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
lors de la mise à niveau des projets avec les paquets nuget de Vx20XX à VS2015, vous pourriez avoir un problème avec les paquets nuget.
exemple de message d'erreur: Ce projet références de package NuGet(s) sont manquantes sur cet ordinateur. Activez la restauration du paquet NuGet pour les télécharger.
mise à jour 2016-02-06: j'avais un lien vers l'information mais il ne fonctionne plus. Je soupçonne qu'une voie récente a résolu le problème ???
I j'ai corrigé mon problème en écrivant un petit programme qui fait MSBuild-restauration de paquet intégrée vs. restauration de paquet automatique
vous pouvez télécharger l'exécutable de l'outil ici .
s'il vous Plaît laissez-moi savoir la suite :-) !
Code dans la référence:
<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";
}
}
}
allez voir les références dans visual studio et regardez quels paquets sont manquants. Maintenant, faites un clic droit sur Solution dans Visual et cliquez sur Ouvrir le dossier dans File explorer. Ouvrez maintenant le dossier des paquets et supprimez le dossier des paquets manquants. Ouvrez visual studio et construisez la solution. tous les paquets manquants seront de restauration. Veuillez noter cette réponse si je vous ai aidé.
je suppose que pour asp.net 4 projet nous allons à la restauration automatique, il n'y a donc pas besoin de cela. Pour les projets plus anciens, je pense qu'un peu de travail à convertir est nécessaire.
http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore
Cette approche a fonctionné pour moi:
- Fermer VS2015
- ouvrir la solution temporairement dans VS2013 et activer nuget package restore en cliquant droit sur la solution (j'ai aussi fait une reconstruction, mais je soupçonne que ce n'est pas nécessaire).
- Close VS2013
- rouvrir la solution dans VS2015
vous avez maintenant activé paquet nuget restaurer dans VS2015 aussi.
j'ai fait face à la même question, tout en essayant de construire exemple de projet gplus-guide de démarrage rapide-csharp-master .
j'ai regardé attentivement le message d'erreur et j'ai trouvé une solution de contournement de surmonter cette erreur, j'espère que cela aidera.
- clic droit sur le fichier solution et ouvrir dans Windows explorer.
- Copie .nuget dossier avec NuGet.Config, NuGet.EXE, NuGet.cibles (télécharger lien ou simplement copier à partir d'un autre projet et remplacé)
- essayer de reconstruire la solution.
Profitez-en !!
Ivan Branets 's solution est essentiellement ce qui fixe cela pour moi, mais un peu plus de détails pourraient être partagées.
dans mon cas, j'étais dans VS 2015 en utilisant restauration de paquet automatique et TFS . C'est tout joli défaut de trucs.
le problème était que lorsqu'un autre développeur a essayé d'obtenir une solution de TFS, certains paquets n'étaient pas complètement restaurer. (Pourquoi, que je ne suis pas encore sûr.) Mais le dossier packages contenait un dossier pour la référence et le paquet NuGet, mais il n'a pas été élargi (par exemple un dossier lib contenant un .dll avait disparu. Cette moitié là, mais pas tout à fait juste concept empêchait le paquet d'être restauré.
vous reconnaîtrez ceci parce que la référence aura un point d'exclamation jaune sur le fait de ne pas être résolu.
So, le solution de supprimer le dossier dans les paquets supprime le problème de blocage de restauration de paquet. Ensuite, vous pouvez clic droit au niveau supérieur de la solution pour obtenir l'option restaurer les paquets , et maintenant il devrait fonctionner.
Close VS. Supprimez tout dans le dossier packages. Rouvrez votre solution. Clic droit sur votre projet, sélectionnez " Gérer les packages nuget...'. Vous verrez une barre jaune apparaître au-dessus de la fenêtre' Nuget Package Manager', vous demandant de restaurer les paquets. Ce qui a fonctionné pour moi.
console du Gestionnaire de paquets (Visual Studio, Tools > NuGet Package Manager > Console du Gestionnaire de paquets): exécutez la commande Update-Package-reinstall-ProjectName où se trouve le nom du projet affecté tel qu'il apparaît dans Solution Explorer. Utilisez Update-Package-reinstaller par lui-même pour restaurer tous les paquets de la solution. Voir Mise À Jour De Package. Vous pouvez également réinstaller un seul paquet, si vous le souhaitez.
de https://docs.microsoft.com/en-us/nuget/quickstart/restore
Pourrait aussi être un résultat de l'exécution du programme pendant que vous essayez d'installer le package. il est grisé si vous essayez de le cliquer alors que l'IIS intégré est en cours d'exécution en arrière-plan.
j'ai dû supprimer des paquets dossier de fermer et ré-ouvrir (VS2015) solution. Je ne faisais pas de migration et je n'ai pas fait vérifier les paquets dans le contrôle source. Tout ce que je peux dire c'est que quelque chose a foiré et ça l'a réparé.
si quelqu'un d'autre trouve ce problème dans Visual Studio 2017, assurez-vous que le projet est ouvert par le .le fichier sln et non le dossier, car visual studio ne récupérera pas les paramètres s'il est ouvert par dossier. Cela se produit par défaut si vous utilisez les services en ligne de Visual Studio pour git.
j'ai utilisé msbuild /t:restore
.
mon problème était avec MSBuild J'ai donc suivi @Vinney Kelly lien: la Migration MSBuild solutions Intégrées Automatique de Paquet de Restauration
et...
Qui a fonctionné COMME UN CHARME =]
MSBuild : utilisez la commande
msbuild /t:restore
, qui restaure les paquets paquets énumérés dans la dossier de projet ( PackageReference seulement). Disponible seulement dans NuGet 4.x+ et MSBuild 15.1+, qui sont inclus avec visuel Studio 2017 .nuget restore
etdotnet restore
utilisent tous deux cette commande pour les projets.
m'a Aidé à travers Outils >>> Gestionnaire de Package Nuget >>> Général , puis cochez l'option Permettre Nuget pour télécharger le paquet manquant et vérifier Automatiquement les paquets manquants lors de la construction dans visual studio .
encore plus simple, ajouter un .le dossier nuget de votre solution et la' restauration des paquets Nuget ' apparaîtra (pas sûr si nuget.exe doit être présent pour que cela fonctionne).