Il y a un similaire poste sur pile mais cela ne résout pas le problème, peut-être parce que j'utilise Visual Studio 2015.
Comment faire en sorte que l'option "Activer la restauration du paquet NuGet" apparaisse dans VS2015?
J'ai choisi Fichier> Nouveau projet et créé une application Web ASP.NET vide. Je cherche cette option de menu.
Je dois mentionner que j’ai cherché des fichiers nuGet préexistants dans mon dossier de projet et qu’il n’en existe aucun.
Cela a pris beaucoup trop de temps, mais j'ai finalement trouvé ce document sur Migration des solutions MSBuild-Integrated vers la restauration automatique des paquets et j'ai pu résoudre le problème à l'aide des méthodes décrites ici.
'.nuget'
de la solution nuget.targets
de vos fichiers .csproj
ou .vbproj
. Bien que cela ne soit pas officiellement pris en charge, le document est lié à un script PowerShell si vous avez beaucoup de projets à nettoyer. J'ai manuellement modifié le mien à la main afin que je ne puisse donner aucun retour d'information concernant mon expérience avec ce logiciel.Lorsque vous éditez vos fichiers à la main, voici ce que vous chercherez:
Fichier de solution (.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
Fichier 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 «Activer la restauration du paquet NuGet» dans VS2015 et vous devez apporter des modifications manuelles pour migrer d'anciennes solutions ou ajouter la fonctionnalité à de nouvelles solutions. La nouvelle fonctionnalité est très bien décrite dans NuGet Package Restore .
Il existe également un guide de migration pour les projets existants (comme mentionné précédemment): Guide de migration NuGet
Lors de la mise à niveau:
Lors de la création d'un nouveau projet:
Créez un fichier dans le répertoire .nuget appelé nuget.config.
Ajoutez le 'nuget.config' au répertoire de la solution créé à l'étape 2.
Placez le texte suivant dans le fichier 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>
Ce fichier de configuration vous permettra de consolider tous vos paquets en un seul endroit, de sorte que vous ne disposiez pas de 20 copies différentes du même paquet flottant sur votre système de fichiers. Le chemin relatif changera en fonction de l'architecture de votre répertoire de solutions, mais il doit pointer vers un répertoire commun à toutes vos solutions.
Vous devez redémarrer Visual Studio après l’étape 5. Nuget ne reconnaîtra pas les modifications tant que vous ne le ferez pas.
Enfin, vous devrez peut-être utiliser le 'Nuget Package Manager for Solutions' pour désinstaller puis réinstaller les packages. Je ne sais pas s'il s'agissait d'un effet secondaire du script Powershell que j'ai utilisé ou simplement d'une méthode permettant de relancer NuGet. Une fois toutes ces étapes effectuées, mon architecture de construction compliquée a parfaitement fonctionné pour supprimer les nouveaux paquets lorsque j'ai extrait des projets de TFVC.
Vous pouvez éventuellement supprimer tous les dossiers du dossier "packages" et sélectionner "Gérer les packages NuGet pour la solution ...". Dans ce cas, le bouton "Restaurer" apparaît sur les paquets Windows de NuGet.
Si vous rencontrez des problèmes ou manquez des packages, vous pouvez simplement cliquer avec le bouton droit de la souris sur votre projet et sélectionner " Gérer les packages NuGet pour Solution ... ". Après avoir cliqué sur ceci, un écran s’ouvrira et vous verrez une barre de menu disant "Restaurer":
Cliquez dessus et les packages requis seront installés automatiquement.
Je crois que c'est ce que vous recherchez, cela a résolu mes problèmes.
Comme 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 manière - sans jouer avec les fichiers et les répertoires - est d'utiliser la console de gestion de paquet NuGet: Cliquez dans le champ 'Démarrage rapide' (généralement dans le coin supérieur droit), entrez console
, ouvrez la console de gestion, puis entrez commander:
Update-Package –reinstall
Cela réinstallera tous les packages 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 proposé par VS2015 - n’est pas disponible. Des commandes de mise à jour plus utiles sont répertoriées et expliquées ici: https://docs.Microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
Lors de la mise à niveau de projets avec des packages de nuget de Vx20XX à VS2015, vous pouvez rencontrer un problème avec les packages de nuget.
Exemple de message d'erreur: Ce projet référence des packages NuGet manquants 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 cela ne fonctionne plus. Je soupçonne qu'un chemin récent a résolu le problème ???
J'ai résolu le problème en écrivant un petit programme qui fait Restauration de paquet MSBuild-Integrated par rapport à restauration de paquet automatique
Vous pouvez télécharger l'exécutable de l'outil ici .
S'il vous plaît laissez-moi savoir le résultat :-) !
Code comme 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 dans Références dans Visual Studio et regardez quels paquetages sont manquants . Maintenant, cliquez avec le bouton droit de la souris sur Solution in Visual et cliquez sur le dossier ouvert dans l'explorateur de fichiers . Ouvrez le dossier packages et supprimez le dossier packages manquants . Visual Studio et juste construire la solution. tous les paquets manquants seront restaurés .. Veuillez marquer ceci comme réponse si j’ai aidé.
Je suppose que, pour le projet asp.net 4, nous passons à la restauration automatique, elle n’est donc pas nécessaire. 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
J'ai rencontré le même problème en essayant de créer un exemple de projet gplus-quickstart-csharp-master .
J'ai regardé de près le message d'erreur et trouvé une solution de contournement pour surmonter cette erreur, j'espère que cela aidera.
Prendre plaisir !!
Cette approche a fonctionné pour moi:
Vous avez maintenant activé la restauration du paquet Nuget dans VS2015 également.
La solution de Ivan Branets est essentiellement ce qui a réglé ce problème pour moi, mais quelques détails supplémentaires pourraient être partagés.
Dans mon cas, j'étais dans VS 2015 en utilisant Auto Package restore et TFS. Ce sont tous de jolies choses par défaut.
Le problème était que lorsqu'un autre développeur tentait d'obtenir une solution de TFS, certains packages n'étaient pas entièrement restaurés. (Pourquoi, je ne suis pas encore tout à fait sûr.) Mais le dossier packages contenait un dossier pour la référence et le package NuGet, mais il ne se développait pas (par exemple, un dossier lib contenant un fichier .dll manquait.) Cette moitié là, mais ce n’était pas tout à fait le bon concept empêchait la restauration du paquet.
Vous le reconnaîtrez parce que la référence aura un point d’exclamation jaune sur le fait de ne pas être résolu.
Ainsi, la solution de supprimer le dossier au sein des packages supprime le problème de blocage de la restauration du package. Ensuite, vous pouvez cliquer avec le bouton droit de la souris sur le niveau de solution le plus élevé pour obtenir l'option de restaurer les packages, et cela devrait maintenant fonctionner.
Fermer VS. Supprimer tout sous le dossier packages. Rouvrez votre solution. Faites un clic droit sur votre projet, sélectionnez "Gérer les paquets de nuget ...". Vous verrez apparaître une barre jaune en haut de la fenêtre 'Nuget Package Manager', vous demandant de restaurer les packages. Cela a fonctionné pour moi.
Console du gestionnaire de packages (Visual Studio, Outils> Gestionnaire de packages NuGet> Console du gestionnaire de packages): Exécutez la commande Update-Package -reinstall -ProjectName où est le nom du projet affecté tel qu'il apparaît dans l'explorateur de solutions. Utilisez Update-Package -reinstall pour restaurer tous les packages de la solution. Voir Update-Package. Vous pouvez également réinstaller un seul package, si vous le souhaitez.
from https://docs.Microsoft.com/en-us/nuget/quickstart/restore
J'ai utilisé msbuild /t:restore
.
Mon problème était lié à MSBuildAlors j'ai suivi le lien de @Vinney Kelly: Migration des solutions MSBuild-Integrated vers la restauration automatique des packages
et...
Cela a fonctionné comme un charme =]
MSBuild: utilisez la commande
msbuild /t:restore
, qui restaure les packages packages répertoriés dans le fichier de projet (PackageReference uniquement). Disponible uniquement dans NuGet 4.x + et MSBuild 15.1+, inclus dans VisualStudio 2017.nuget restore
etdotnet restore
utilisent tous les deux cette commande pour les projets applicables.
Cela peut également résulter de l'exécution du programme pendant que vous essayez d'installer le package. il est grisé si vous essayez de cliquer dessus alors que le composant intégré IIS fonctionne en arrière-plan.
J'ai dû supprimer le dossier de paquets fermer et rouvrir la solution (VS2015). Je n'étais pas en train de migrer et aucun paquet n'a été vérifié dans le contrôle de source. Tout ce que je peux dire, c'est que quelque chose s'est brouillé et que cela a été corrigé.
Si quelqu'un d'autre trouve ce problème dans Visual Studio 2017, assurez-vous que le projet est ouvert par le fichier .sln et non par le dossier, car Visual Studio ne détectera pas les paramètres s'il est ouvert par dossier. Cela se produit par défaut si vous utilisez les services en ligne Visual Studio pour git.
Pour Projets .NET Core , exécutez la commande dotnet restore
ou dotnet build
dans NuGet Package Manager Console
(qui exécute automatiquement la restauration)
Vous pouvez exécuter la console à partir de
Outils> Gestionnaire de paquets NuGet> Console du gestionnaire de paquets
Utilisez cette commande pour restaurer tous les packages
dotnet restore
Si tout échoue (ou peut-être avant alors), vous pouvez vérifier si NuGet est une source de paquet. J'ai installé VS2017 et ce n'était PAS là par défaut. Je pensais que c'était un peu bizarre.