Gedeelde directory voor NuGet-packages en automatisch packages downloaden

Door CodeCaster op zondag 18 november 2012 23:15
Categorie: Tech, Views: 3.159

De immer populaire uitbreiding van Visual Studio, NuGet genaamd, laat de developer eenvoudig packages downloaden vanuit zijn ontwikkelomgeving. Deze packages bevatten bekende en minder bekende libraries, zoals log4net, jQuery en Entity Framework.

De NuGet-extensie voor Visual Studio is in een handomdraai ge´nstalleerd, waarna packages kunnen worden toegevoegd aan een geopend project. Naast een grafische interface van waaruit packages gezocht, ge´nstalleerd en beheerd kunnen worden, wordt ook een PowerShell-console toegevoegd aan het menu.

Vanuit deze console kan middels het eenvoudige commando Install-Package $PackageName de genoemde package (met tab-completion!) gedownload worden en worden ook de juiste references, configuratie-items en zelfs codebestanden toegevoegd aan het project. Daarnaast wordt in het bestand packages.config, in de root van het project, bijgehouden welke packages en welke versies daarvan aan het betreffende project zijn gekoppeld. Waar de eerste succesvolle Install-Package het packages.config-bestand aanmaakt, zal de Uninstall-Package van de laatste package het bestand ook weer verwijderen.

Wanneer een solution meerdere projecten bevat, zal de NuGet-console opereren op het project dat in Visual Studio als startup-project is aangemerkt. Om packages aan een ander project binnen dezelfde solution toe te voegen, kun je het Install-Package uitbreiden met -ProjectName $ProjectName. Hetzelfde geldt uiteraard voor het verwijderen en updaten van packages. Dat laatste gebeurt uiteraard met het commando Update-Package.

Packages worden standaard gedownload naar de [mono]packages[/url]-map, eveneens in de root van het project waarop ze van toepassing zijn. Wanneer je aan meerdere projecten werkt die elk hun eigen packages bevatten, kunnen deze bestanden al snel een aanzienlijke hoeveelheid schijfruimte opeisen. Gelukkig is hiervoor een eenvoudige oplossing ge´ntroduceerd met NuGet 2.1.

Gedeelde packages-directory
NuGet zoekt, voordat het begint met het downloaden van een package, naar een gecachete versie van de package, in de map packages onder de projectroot. Als deze map niet gevonden kan worden, gaat NuGet op zoek naar het bestand nuget.config, vanaf de projectroot tot en met de root van de schijf waarop het project zich bevindt. In dit bestand kunnen instellingen voor alle projecten worden vastgelegd die zich onder die directory bevinden.

In mijn geval is het pad naar het bestand D:\Dev\Visual Studio\Projects\nuget.config. Het bevat de volgende inhoud:
XML:
1
2
3
4
5
<configuration>
  <config>
    <add key="repositoryPath" value="D:\Software\Libraries\NuGet\packages\" />
  </config>
</configuration>


Zo zullen de packages behorend bij ieder project onder D:\Dev\Visual Studio\Projects\ dat gebruikmaakt van NuGet worden gezocht en opgeslagen in D:\Software\Libraries\NuGet\packages\. Dit geldt echter alleen voor projecten die nog geen packages-directory in hun root hebben staan. Als die map wel bestaat, zal NuGet die map gebruiken voor het opzoeken en cachen van packages voor dat project.

Automatisch packages downloaden
Behalve gebruikmaken van een gedeelde directory kan NuGet nog meer met packages. Ze kunnen namelijk ook automatisch worden gedownload, wat een uitkomst kan zijn bij projecten waar op verschillende machines aan gewerkt wordt, of die automatisch gebouwd moeten kunnen worden.

Wanneer je package restore inschakelt, zal bij het bouwen van het project worden gecontroleerd of alle in de packages.config genoemde packages aanwezig zijn. Zo niet, dan worden ze opgezocht in de packages-directory; wanneer ze daar niet in bestaan zullen ze automatisch gedownload worden.


http://codecaster.nl/got/rmb/star1.pnghttp://codecaster.nl/got/rmb/star2.pnghttp://codecaster.nl/got/rmb/star3.pnghttp://codecaster.nl/got/rmb/star4.pnghttp://codecaster.nl/got/rmb/star5.pnghttp://codecaster.nl/got/rmb/stats.gif

Deze blog is ook in het Engels beschikbaar.

Volgende: Windows 8 AppRace-inzending: Photostream 01-'13 Windows 8 AppRace-inzending: Photostream
Volgende: WCF: Beveiliging middels certificaten 10-'12 WCF: Beveiliging middels certificaten

Reacties

Reageren is niet meer mogelijk