325 votes

Est-il possible de changer l’emplacement des packages par NuGet ?

J’ai la convention suivante, pour la plupart de mes projets :

Vous remarquerez que je ne pas garder des bibliothèques externes à l’intérieur du dossier source. Je suis également très intéressé à l’aide de NuGet, mais ne veulent pas ces bibliothèques externes dans le dossier source. NuGet a-t-il un réglage à modifier le répertoire de tous les colis chargés dans ?

259voto

PHeiberg Points 15909

Il est maintenant possible de contrôler le dossier dans lequel les paquets sont installés dans des.

http://nuget.codeplex.com/workitem/215

Edit: Voir Phil Haack commentaire le 10 Décembre 2010 à 11:45 (dans l'élément de travail/le lien ci-dessus). Le support est partiellement mise en œuvre de la version 1.0, mais n'est pas documentée.

Selon @dfowler: Ajouter un nuget.fichier de configuration à côté de la solution avec ceci:

<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>

Il y a un package nuget pour la création du package dossier override.

Mise à jour pour la version 2.1

Comme Azat commenté, il est maintenant officiel, la documentation sur la façon de contrôler le paquet endroits. Les notes de version pour la version 2.1 spécifie la configuration suivante dans un nuget.fichier de configuration (voir les notes de version pour obtenir une description de valable endroits pour mettre les fichiers de configuration et de la façon dont la hiérarchie de configuration est un modèle qui fonctionne):

<configuration>
  <config>
    <add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
  </config>
  ... 
</configuration>

Ce serait de changer le dossier packages pour le niveau configuration vous placez le fichier dans (solution si vous le mettez dans la solution répertoire du projet dans le répertoire de projet et ainsi de suite). Notez que les notes de publication de l'état:

[...] si vous avez déjà un dossier packages en dessous de votre solution racine, vous devez le supprimer avant de NuGet placer les paquets dans le nouvel emplacement.

67voto

Shane Km Points 5233
<ol> <li>Crée un fichier appelé « nuget.config ».</li> <li>Ajouter ce fichier à mon dossier de solutions</li> <p>Cela n’a pas fonctionné pour moi :</p><pre><code></code></pre><p>Cela n’a fonctionné pour moi :</p><pre><code></code></pre></ol>

46voto

Robert Petz Points 558

Ok pour le bien de quelqu'un d'autre lecture de ce post - voici ce que je comprends de la myriade de réponses ci-dessus:

  1. Le nuget.fichier de config dans le .nuget dossier est relatif à ce dossier. Ceci est important parce que si votre dossier est quelque chose comme "../Packages " qui va le mettre où il va toujours hors de la boîte. @Bruce14 états que l'on doit faire "../../Packages " à la place

  2. Je ne pouvais pas obtenir les dernières nuget (2.8.5) pour trouver un dossier packages à l'extérieur de l'emplacement standard sans activation du forfait de restauration. Donc, une fois que vous activez le package de restaurer les opérations suivantes doivent être ajoutées à la nuget.fichier de configuration à l'intérieur de l' .nuget dossier pour changer l'emplacement:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      ...
      <config>
        <add key="repositoryPath" value="..\..\Packages" />
      </config>
      ...
    </configuration>
    
  3. (C'est important) Si vous apportez des modifications dans le dossier packages emplacement à l'intérieur de la nuget.les fichiers de configuration, vous devez redémarrer visual studio ou de fermer/recharger la solution pour que les modifications prennent effet

18voto

Dmitry Naumov Points 186

La solution proposée dans les notes de version pour la version 2.1 ne fonctionne pas out-of-the-box. Ils ont oublié de mentionner qu'il y a de code:

internal string ResolveInstallPath()
{
    if (!string.IsNullOrEmpty(this.OutputDirectory))
    {
        return this.OutputDirectory;
    }
    ISettings settings = this._configSettings;

    ...
}

ce qui l'empêche de travailler. Pour corriger cela, vous devez modifier votre NuGet.les objectifs de fichier et supprimer " OutputDirectory paramètre:

    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch)</RestoreCommand>

Donc maintenant, si vous ajoutez 'repositoryPath' config quelque part dans NuGet.config (voir les notes de version pour obtenir une description de valable endroits pour mettre les fichiers de config), il sera de restaurer tous les paquets en un seul endroit, mais... Votre .csproj contient encore des astuces pour les assemblées écrit que les chemins d'accès relatifs...

Je ne comprends toujours pas pourquoi ils sont allés dure au lieu de changer de PackageManager donc, il serait ajouter indicateur des chemins relatifs à PackagesDir. C'est la façon dont je le fais manuellement les différentes localisations de package en local (sur mon bureau) et sur l'agent de build.

<Reference Include="Autofac.Configuration, Version=2.6.3.862, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>$(PackagesDir)\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll</HintPath>
</Reference>

12voto

bruce14 Points 471

En plus de la réponse de Shane Kms, si vous avez activé la restauration de Package Nuget, vous modifiez la NuGet.config situé dans le dossier .nuget comme suit :

Remarquez l’extra «... \ », car il revient en arrière depuis le dossier .nuget et pas le dossier de solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X