2012-07-30 13 views
5

Codice:Ottenere versione post-generazione per Nuget

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Entities -f 
    nuget pack DeusPak.Entities.csproj -Prop Configuration=Release 
    nuget push DeusPak.Entities.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/lojaali/api/v2/package 
) 

ho appena iniziato a giocare con NuGet e volete sapere come includere il numero di versione nel mio pacchetto NuGet. Attualmente sto codificando con forza nell'evento post-build che ovviamente non è quello che voglio continuare a fare. Qualcuno può aiutare?

Questo è il mio attuale evento di post-generazione:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev-f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.1.0.0.0.nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

Aggiornamento:

OK, sono riuscito a costruire la DLL con l'auto giusta incrementato il numero di versione:

if $(ConfigurationName) == Release (
    cd $(ProjectDir) 
    nuget spec Dev -f 
    nuget pack Dev.csproj -Prop Configuration=Release 
    nuget push Dev.$(version).nupkg $(MYGET_API_KEY) -Source  http://www.myget.org/F/api/v2/package 
) 

Ma questa versione non viene visualizzata nell'elenco dei pacchetti MyGet. Come faccio a visualizzarlo in modo che possa essere scaricato? Oppure può essere fatto solo manualmente facendo clic su "Aggiungi un pacchetto"?

+0

I comandi sembrano OK. Ci può essere un piccolo ritardo tra spingere il pkg e averlo a disposizione sul feed MyGet. Questo non dovrebbe richiedere più di pochi minuti. Ricorda inoltre che, se si esegue il push di un pacchetto prerelease (ad esempio 1.0.0-alpha), è necessario utilizzare l'opzione -IncludePrerelease nella console NuGet Package Manager oppure selezionare l'opzione IncludePrerelease nel menu a discesa quando si sfoglia il feed attraverso il Finestra di dialogo dell'interfaccia utente VSIX. Sei sicuro che il pkg spinga con successo (nessun log)? –

risposta

6

Non è chiaro nella sua interrogazione, ma assumendo si desidera sincronizzare la versione del pacchetto con la versione del montaggio, si può semplicemente gestire l'attributo AssemblyVersion nel file AssemblyInfo.cs del progetto.

[assembly: AssemblyVersion("1.0.0")] 

o se si desidera utilizzare auto-generata costruire numeri

[assembly: AssemblyVersion("1.0.0.*")] 

Se si vuole deviare dalla versione del montaggio e specificare solo la versione del pacchetto, è possibile utilizzare l'attributo AssemblyInformationalVersion nel File AssemblyInfo.cs.

[assembly: AssemblyInformationalVersion("1.0.0")] 

E 'inoltre chiaro dalla domanda quale strategia si utilizza il controllo delle versioni, ma io assumere si desidera applicare Semantic Versioning (dove i primi 3 numeri di versione sono più rilevanti). In generale, quando si creano automaticamente pacchetti NuGet, ti consiglio di creare un tokenized nuspec file nella directory csproj, in modo da poter manipolare più facilmente i metadati del pacchetto. A proposito, c'è anche un pacchetto di NuGet per aiutarvi con che:

Install-Package NuSpec 

NuGet cercherà questo nuspec (assicurarsi che si chiama MyProject.nuspec) quando il targeting MyProject.csproj.

<package> 
    <version>$version$</version> 
    ... 
</package> 

ho anche spiegato questo sul MyGet blog in questo post: http://blog.myget.org/post/2012/04/27/NuGet-version-token-explained.aspx

Una build post che chiama NuGet confezionare dovrebbe essere abbastanza buono quindi, assumendo è sufficiente cambiare la versione di montaggio prima di costruire.

nuget pack MyProject.csproj 
+0

Ciao, non voglio cambiare manualmente la versione dell'assembly nel mio post build ogni volta però, voglio essere in grado di passare il token che preleva automaticamente il numero di versione. Quindi questa è la linea che voglio cambiare ma non sono sicuro della sintassi: nuget push Dev.1.0.0.0.nupkg $ (MYGET_API_KEY) -Source http://www.myget.org/F/api/v2/ pacchetto – user517406

+0

Anche se aggiungo la versione con 3 cifre (come il tuo esempio, "1.0.0"), nuget genera un file che termina con '1.0.0.0.nupkg'. Mi manca qualcosa forse? Il mio file assemblyinfo ha solo gli attributi 'AssemblyVersion' e' AssemblyFileVerion', ed entrambi hanno lo stesso valore, "1.0.0". – julealgon

4

Ecco come è possibile ottenere una variabile $ (versione) nell'evento after build, che dovrebbe essere buono come post-build.

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <Exec Command="echo %(AssemblyVersion.Version)" /> 
    <Message Text="Released %(AssemblyVersion.Version)" Importance="high" /> 
</Target> 

Quindi è necessario modificare il file .csproj poiché VS non fornisce un'interfaccia utente per questo.

5

Solo estendendo un po 'la soluzione fornita da Carlos J López, ho usato lo script AfterBuild per chiamare effettivamente NuGet e fornire il parametro della versione.

Nel mio caso, ho anche aggiunto "cd $ (ProjectDir)" all'evento post build, che in realtà accade prima dello script AfterBuild.

Cheers,

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> 
     <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
     </GetAssemblyIdentity> 
     <Exec Command="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" /> 
     <Message Text="$(SolutionDir)\.nuget\nuget pack $(ProjectName).nuspec -Version %(AssemblyVersion.Version)" Importance="high" /> 
    </Target> 
Problemi correlati