Vérifier les paquets de NuGet dans le contrôle de version?

avant NuGet, il était communément admis que la "meilleure pratique" consistait à enregistrer tous les LDD externes utilisés dans le cadre d'un projet. Typiquement dans un répertoire Libs ou 3rdParty .

quand je travaille avec NuGet, suis-je censé enregistrer dans le répertoire packages , ou y a-t-il un moyen pour MSBuild de télécharger automatiquement les paquets nécessaires à partir du flux nuget?

87
demandé sur casperOne 2011-02-12 17:57:35

7 réponses

Non

depuis que cette question a été posée, il y a maintenant un flux de travail facile pour utiliser NuGet sans commettre de paquets au contrôle source

depuis votre console de gestionnaire de paquets, vous devez installer les 'NuGetPowerTools ' :

Install-Package NuGetPowerTools

ensuite, pour permettre à vos projets de soutenir pack restaurer vous devez exécuter une autre commande:

Enable-PackageRestore

Maintenant vous êtes prêt à commettre votre base de code sans le dossier packages. La commande précédente a modifié vos fichiers de projet de sorte que si des paquets sont manquants, ils sont automatiquement téléchargés et ajoutés.

Source

utilisant NuGet sans engager les paquets au contrôle source

67
répondu Edward Wilde 2011-10-21 10:04:27

Oui. Considérez que le répertoire" packages "est équivalent à votre répertoire" libs " que vous avez mentionné dans votre question. C'est l'approche que je prends personnellement avec mes projets OSS.

nous étudions les fonctionnalités qui permettraient à MSBuild de télécharger automatiquement les paquets nécessaires, mais qui n'ont pas encore été implémentées (à partir de NuGet 1.1).

je pense que certaines personnes ont peut-être déjà mis en œuvre ces fonctionnalités sur leur propre, mais notre plan est d'examiner avoir cette fonctionnalité intégrée à NuGet 1.2 ou 1.3, espérons-le.

30
répondu Haacked 2011-02-13 00:41:57

malgré toutes les réponses ici, il est toujours une simple ole' horrible solution de ne pas avoir toutes vos dépendances sous "une sorte" de contrôle de version.

pour GIT, cela signifierait git-LFS.

le récent épisode avec NPM montre pourquoi: si le dépôt internet dont vous dépendez casse, sont indisponibles etc., vous êtes foutu aint vous?

vous n'êtes plus en mesure de construire vos affaires - et donc pas en mesure de livrer.

6
répondu Casper Leon Nielsen 2016-04-15 15:22:26

depuis que j'ai posé la question, j'ai mis dans l'approche suivante de sorte que je n'ai pas à vérifier dans le répertoire toplovel Packages .

dans une construction de niveau supérieur.fichier msbuild:

<Target Name="NuGet">
    <ItemGroup>
       <NuGetPackage Include="*\packages.config" />
    </ItemGroup>
    <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages'  />

    <!-- optional for project that has JavaScript content -->
    <CreateItem Include="Packages\*\Content\Scripts\*">
       <Output TaskParameter="Include" ItemName="NuGetJSFiles"/>
    </CreateItem>
    <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" />
    <Delete Files="MainProj\Scripts\.gitignore" />
    <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" /
    <Delete Files="@(PostNuGetFiles)" />
</Target>

dans chaque projet.dossier csproj

<Target Name="BeforeBuild">
    <Error Condition="!Exists('..\Packages\')" Text="You must run &gt; msbuild build.msbuild to download required NuGet
Packages" />

    <!-- optional for project that has JavaScript content -->
   <ReadLinesFromFile File="Scripts\.gitignore">
     <Output TaskParameter="Lines" ItemName="ReqJSFiles" />
   </ReadLinesFromFile>
   <Message Text="@(ReqJSFiles)" />
   <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run &gt; msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" />
 </Target>
5
répondu Scott Weinstein 2011-07-30 14:41:57

je me rends compte que la réalité était différente lorsque cette question a été initialement affichée et répondue, mais heureusement la réponse a un peu changé. Il est maintenant possible d'utiliser NuGet pour télécharger des dépendances via MSBuild en utilisant un événement de pré-construction. Vous n'avez pas besoin de mettre le dossier packages dans votre dépôt de code, toutes les dépendances seront téléchargées et/ou mises à jour sur build. Il peut une solution de contournement, mais il semble assez décent. Voir le blog suivant pour plus de détails: http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

4
répondu Pawel Krakowiak 2011-07-01 12:44:56

en date du 20/09/13, il y a quelque chose appelé "Nuget Restore". En fait vous n'avez pas à vérifier dans le dossier du package si vous le souhaitez. (Surtout si vous utilisez des DVCS)

vérifier ceci: utiliser NuGet sans commettre de paquets au contrôle source http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

3
répondu Matt W 2013-09-20 18:56:38

ce billet est devenu très désuet. La réponse est toujours non, mais la solution a changé. À partir de NuGet 2.7+ , vous pouvez activer la restauration automatique du paquet sans inclure le NuGet.le fichier exe dans votre source (cela n'est pas souhaitable pour le moins) et si vous utilisez un DVCS moderne, vous pouvez ignorer le dossier packages. Si vous avez besoin de personnalisations spéciales, vous pouvez créer un nuget.fichier de configuration dans la solution root.

http://docs.nuget.org/docs/reference/package-restore

aussi, avec le nouveau format csproj vous pouvez éviter le nuget supplémentaire.les fichiers de configuration sont maintenant intégrés. S'il vous plaît vérifier ce post qui explique que mieux:

le Devrait .le dossier nuget sera ajouté au contrôle de version?

3
répondu Jeremy 2017-12-29 15:06:53