J'ai la convention suivante pour la plupart de mes projets:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Vous remarquerez que je ne garde pas les bibliothèques externes dans le dossier source. Je suis également très intéressé par l'utilisation de NuGet, mais je ne veux pas que ces bibliothèques externes se trouvent dans le dossier source. NuGet a-t-il un paramètre pour changer le répertoire dans lequel tous les packages sont chargés?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
la source
la source
Réponses:
Il est désormais possible de contrôler dans quel dossier les packages sont installés.
http://nuget.codeplex.com/workitem/215
Edit: Voir le commentaire de Phil Haack le 10 décembre 2010 à 23h45 (dans l'élément de travail / le lien ci-dessus). Le support est partiellement implémenté dans 1.0, mais n'est pas documenté.
Selon @dfowler: Ajoutez un fichier nuget.config à côté de la solution avec ceci:
Il existe un package nuget pour créer la substitution du dossier du package.
Mise à jour pour la version 2.1
Comme l'a commenté Azat, il existe maintenant une documentation officielle sur la façon de contrôler l'emplacement des paquets. Les notes de publication pour 2.1 spécifient la configuration suivante dans un fichier nuget.config (voir les notes de publication pour une description des emplacements valides pour placer les fichiers de configuration et comment fonctionne le modèle de configuration hiérarchique):
Cela changerait le dossier des packages pour le niveau de configuration dans lequel vous placez le fichier (solution si vous le placez dans le répertoire de la solution, projet dans le répertoire du projet, etc.). Notez que les notes de version indiquent:
la source
Cela n'a pas fonctionné pour moi:
cela a fonctionné pour moi:
la source
D'accord pour le bien de quiconque lisant cet article - voici ce que je comprends de la myriade de réponses ci-dessus:
Le fichier nuget.config dans le dossier .nuget est relatif à ce dossier. Ceci est important car si votre nouveau dossier est quelque chose comme '../Packages' qui le mettra là où il sort toujours de la boîte. Comme le dit @ bruce14, vous devez plutôt faire '../../Packages'
Je n'ai pas pu obtenir le dernier nuget (2.8.5) pour trouver un dossier de packages en dehors de l'emplacement standard sans activer la restauration des packages. Ainsi, une fois que vous avez activé la restauration des packages, les éléments suivants doivent être ajoutés au fichier nuget.config à l'intérieur du dossier .nuget pour modifier l'emplacement:
(Ceci est important) Si vous apportez des modifications à l'emplacement du dossier du package à l'intérieur des fichiers nuget.config, vous devez redémarrer Visual Studio ou fermer / recharger la solution pour que les modifications prennent effet
la source
Une solution pour Nuget 3.2 sur Visual Studio 2015 est:
Utilisation de la barre oblique pour le dossier parent. Enregistrez le fichier ci-dessus (nuget.config) dans le dossier de la solution.
La référence est disponible ici
la source
../lib
C'est une barre oblique, pas une barre arrière. Que voulez-vous dire?La solution proposée dans les notes de publication pour 2.1 ne fonctionne pas prête à l'emploi. Ils ont oublié de mentionner qu'il y a du code:
ce qui l'empêche de fonctionner. Pour résoudre ce problème, vous devez modifier votre fichier NuGet.targets et supprimer le paramètre «OutputDirectory»:
Alors maintenant, si vous ajoutez la configuration 'repositoryPath' quelque part dans NuGet.config (voir les notes de publication pour une description des endroits valides pour placer les fichiers de configuration), il restaure tous les packages en un seul emplacement, mais ... Votre .csproj reste contient des conseils sur les assemblages écrits sous forme de chemins relatifs ...
Je ne comprends toujours pas pourquoi ils sont allés si dur au lieu de changer PackageManager afin d'ajouter des chemins d'indication par rapport à PackagesDir. C'est ainsi que je fais manuellement pour avoir différents emplacements de packages localement (sur mon bureau) et sur l'agent de build.
la source
En plus de la réponse de Shane Kms, si vous avez activé la restauration de packages Nuget, vous modifiez le NuGet.config situé dans le dossier .nuget comme suit:
Notez le ".. \" supplémentaire, car il revient en arrière du dossier .nuget et non du dossier de la solution.
la source
Aucune de ces réponses ne fonctionnait pour moi (Nuget 2.8.6) en raison du manque de quelques conseils, j'essaierai de les ajouter ici car cela pourrait être utile pour d'autres.
Après avoir lu les sources suivantes:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Il apparaît que
Par exemple
Vous pouvez également utiliser la commande NuGet pour vous assurer que la syntaxe sera correcte comme ceci:
la source
Pour les projets .NET Core et Visual Studio 2017, j'ai pu restaurer tous les packages sur un chemin relatif en fournissant cette configuration:
D'après mon expérience, le dossier lib a été créé au même niveau que celui où Nuget.config a été trouvé, peu importe où se trouvait le fichier sln. J'ai testé et le comportement est le même pour la restauration dotnet en ligne de commande et la reconstruction de Visual Studio 2017
la source
globalPackagesFolder
clé du dossier de package de mon projet. J'ai essayé d'ajouter un seul paquet avecdotnet add package MyPackage
.nuget.exe
téléchargé l'intégralité du framework de 83 packages .NET dans ce dossier. Ce n'est pas ce que je voulais. Je voulais juste mon unique MyPackage dans mon dossier de package local contrôlé par la source.Le fichier de configuration dans la réponse acceptée fonctionne pour moi dans VS2012. Cependant, pour moi, cela ne fonctionne que lorsque je fais ce qui suit:
Si je suis ces étapes, je peux utiliser un dossier de package partagé.
la source
Afin de changer le chemin des projets utilisant PackageReference au lieu de packages.config, vous devez utiliser
globalPackagesFolder
Depuis https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
J'ai mis Nuget.config à côté de mon fichier de solution et cela a fonctionné.
la source
Encore une petite friandise que je viens de découvrir. (Cela peut être si basique que certains ne l'ont pas mentionné, mais c'était important pour ma solution.) Le dossier "packages" se retrouve dans le même dossier que votre fichier .sln.
Nous avons déplacé notre fichier .sln puis corrigé tous les chemins à l'intérieur pour trouver les différents projets et le tour est joué! Notre dossier de packages s'est retrouvé là où nous le voulions.
la source
MISE À JOUR pour VS 2017:
Apparemment, les gens de l'équipe Nuget ont finalement commencé à utiliser Nuget eux-mêmes, ce qui les a aidés à trouver et à corriger plusieurs choses importantes. Alors maintenant (si je ne me trompe pas, comme je n'ai toujours pas migré vers VS 2017), ce qui suit n'est plus nécessaire. Vous devriez pouvoir définir le "repositoryPath" dans un dossier local et cela fonctionnera. Même vous pouvez le laisser comme emplacement de restauration par défaut déplacé des dossiers de solution au niveau de la machine. Encore une fois - je ne l'ai toujours pas testé par moi-même
VS 2015 et versions antérieures
Juste un conseil pour d'autres réponses (en particulier ceci ):
L'emplacement du dossier NuGet Package peut être modifié via la configuration, mais VisualStudio fait toujours référence aux assemblys de ce dossier:
Pour contourner cela (jusqu'à une meilleure solution), j'ai utilisé la commande subst pour créer un lecteur virtuel qui pointe vers un nouvel emplacement du dossier Packages:
Maintenant, lors de l'ajout d'un nouveau package NuGet, la référence du projet utilise son emplacement absolu:
Remarque:
la source
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
au lieu d'utilisersubst
Mise à jour avec Nuget 2.8.3. Pour modifier l'emplacement des packages installés, j'ai activé la restauration des packages à partir de la solution de clic droit. Modifié NuGet.Config et ajouté ces lignes:
Puis reconstruit la solution, il a téléchargé tous les packages dans mon dossier souhaité et mis à jour les références automatiquement.
la source
La manière la plus cohérente consiste à utiliser
nuget config
pour définir correctement la configuration:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
la source