NuGet – Del 1: Oppsett og bruk av NuGet – og hvorfor dette er viktig når du anvender Git

Vi skal fremover kjøre en serie med tekniske artikler for utviklere, med aktuelle temaer – og for min del blir det et fokus på utviklingsverktøy, både oppsett og bruk av dette.  Det betyr Visual Studio, TFS og mye som er relatert til disse.  Først ut er NuGet – med en liten smak på Git.

 

NuGet

NuGet er en såkalt pakke manager, som anvendes for å hente ned binære filer når man trenger dem, istedet for å ha dem permanent lagret i kildekontrollsystemet.  Man erstatter altså typiske Lib, References eller External foldere hvor man tidligere lagret eksterne biblioteker man trengte med NuGet.  NuGet vil håndtere nedlasting av de eksterne bibliotkene etter behov, og i beste tilfelle har man kun en konfigurasjonsfil per prosjekt.  De eksterne bibliotekene ligger enten på nuget.org – som er et stort online bibliotek av publiserte pakker, eller på egne nuget servere.

NuGet kan benyttes i to modi: 1) Henter ned pakkene når man installerer dem, og lagre pakkene i kildekontrollsystemet. Dette var standard oppførsel opp til versjon 2.6. Vi er i skrivende stund på 2.7.   2) Hente ned pakkene ved installasjon, men ikke lagre dem i kildekontrollsystemet.  De blir da hentet automatisk ned hver gang man bygger applikasjonen.  Dette er standard oppførsel i 2.7.

Den nye oppførselen i 2.7 er perfekt matchet til Git.  Den krever intet oppsett i en Visual Studio solution, den bare virker ! 

I NuGet versjon 2.6 eller lavere, så må man “Enable solution for Nuget” pluss endre en innstilling i Nuget settings for å få dette til.   Instruksjonene under viser hvordan du setter opp NuGet for automatisk restore, gitt litt forskjellige scenarioer.   I neste post ser vi på oppsett av private NuGet repositorier.

 

Og merk at dersom man anvender Visual Studio 2013 og TFS 2013, og man ikke har endret noen standardinnstillinger, så fungerer NuGet automatisk restore uten noe mer oppsett.

 

Git

En av de store endringene som er kommet i Visual Studio og TFS 2013 er introduksjonen av Git som alternativ versjonskontroll for TFS.  Disse endringene er både i TFS, hvor man nå kan velge om man vil benytte TFS Versjonskontroll (TFS VC) eller Git versjonskontroll for et team prosjekt, og i Visual Studio, som endrer en del oppførsel avhengig av om den er koplet mot TFS VC eller Git.  Til forskjell fra TFS VC som har et stort repository for all versjonskontroll, så vil man i Git benytte mange små repositorier (ofte kallt ‘repo’ ).   Hvert slikt repo vil da typisk representere EN applikasjon.  Man deler altså opp en portefølge av programmer i de enkelte programmene, og kildekoden til hvert program ligger i et eget repo.  I en senere post skal vi se nærmere på Git endringene.

En ting som er viktig når man tar i bruk Git er å få disse repo’ene små.  

Dette er også en fordel for vanlig TFS Versjonskontroll, men med Git blir det helt essensielt.

Første steg er altså at et repo kun holder –1- applikasjon.  Hver applikasjon har sitt eget repo. 

Det andre steget er å få fjernet binære filer fra repo’et.  Dette kan være både tredjeparts biblioteker, som det i dag ofte er mange av, og det kan være egne biblioteker eller rammeverkspakker.  I det siste tilfelle må man sette opp en egen NuGet server eller anvende en online NuGet service, som f.eks. MyGet.  Dette kommer i neste post.

 

Visual Studio og NuGet versjoner

Visual Studio 2012 kommer med NuGet versjon 2.2 som standard.  Du bør – men må ikke - oppgradere denne, gå da til Tools/Extensions and Updates og finn NuGet under Updates/Visual Studio Gallery

image

Visual Studio 2013 kommer med NuGet 2.7 som standard.

 

 

Oppsett av NuGet 2.7  (Visual Studio 2013 standard)

Her er det egentlig kun å sjekke av at det ikke er blitt utilsiktede endringer. Om du åpner Tools/Options/Package Manager, under General, så skal det se slik ut:

image

Oppsett av NuGet 2.6 og tidligere (Visual Studio 2012 standard)

I NuGet 2.6 eller tidligere må du endre standard oppsett for NuGet.  Gå til Tools/Options/Package Manager/General og kryss av sjekkboksen for “Allow NuGet to download missing packages during build”.  Denne er standard av.

image

 

Enable NuGet Package Restore (for VS2012 og/eller TFS 2012 brukere)

Denne muligheten er nødvendig om man anvender VS 2012 med Nuget 2.6 eller lavere, og/eller TFS 2012, men ikke om man anvender VS 2013 og TFS 2013.  Det betyr at om man bruker VS 2013 mot en TFS 2012 (eller tidligere versjon), så må man anvende Enable NuGet Pacakage Restore på solution.  Om man har gått fullstendig over til VS2013 og TFS2013, så behøver man ikke anvende denne, da det denne tilbyr er håndtert av disse.  VS 2012 med NuGet 2.7 mot TFS 2013 fungerer også utmerket uten denne.

Det denne gjør er at den legger til en egen MSBuild target fil, samt legger et kall til denne inn i csproj filene.  I denne target filen kan man skru på automatisk restore av nuget pakkene.

Om du da må legge til denne, gjør som følger:

1. Ha Solution åpen

2. Høyreklikk og velg Enable NuGet Package Restore

image

Du vil nå få en folder i solution som heter .NuGet.  

Her skal du slette filen NuGet.exe.  Denne kan du sette opp til automatisk nedlasting i stedet – og dermed sparer du en exe til.  Om du lar den ligge vil du få en slik per solution du legger inn, og det er unødvendig.

Gå deretter inn i NuGet.targets og sett følgende:

image

 

Ikke sjekk inn Packages folderen

På din solution rot vil du finne en folder som heter Packages.  Under denne ligger alle pakkene som NuGet har lastet ned for deg.  Denne folderen skal du ikke sjekke inn i kildekontroll. 

Du bør da sette opp solution slik at den ikke gjør dette, og hvordan det gjøres avhenger av hva slags kildekontroll du anvender.

Tradisjonell TFS Versjonskontroll

Det letteste er å legge til en standard NuGet.config fil.  Dette er den samme filen som vi fikk i seksjonen over. 

Lag en folder “.nuget”.

Lag en fil NuGet.config som skal inneholde følgende:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

Denne nøkkelen vil sørge for at packages filene ikke legges inn i kildekontrollsystemet.

Git Versjonskontrol – inklusive TFS Git

Her må det legges inn i filen .gitignore.  I Visual Studio kan den legges til ved å gå til Git Settings og enten skape den eller Edit den derfra.  I den samme filen kan du også spesifikt legge til at NuGet.exe skal ignoreres.

Legg til to linjer:

 packages/
 NuGet.exe
  

TFS 2012 Build oppsett

Dersom du anvender TFS 2012 eller tidligere for bygging, så må disse buildserverne også få satt  tillatelse til å foreta nedlasting av NuGet pakker.  Dette er ikke nødvendig for TFS 2013 fordi byggtemplatene der støtter NuGet 2.7.  Det gjør ikke templatene for 2012 og tidligere.  For å gi denne tillatelsen oppretter du en system variabel EnableNuGetPackageRestore og setter den til “true”, som vist under.

image

Merk at dette må gjøres fra en Admin konto slik at det tar effekt for samtlige brukere på maskinen. 

 

Nyttige linker

NuGet 2.7 Restore

NuGet config detaljer

NuGet Package Restore dokumenter

 

Neste post

I neste post ser vi på oppsett av egne NuGet servere, og bruken av multiple kilder.

 

Terje Sandstrom picture Terje Sandsstrøm arbeider som Chief Software Architect i Inmeta Consulting AS.  Han er også en Microsoft ALM MVP. Du kan lese mer på hans blog, eller følge han på Twitter @OsirisTerje