Mi chiedo se c'è un modo per sincronizzare i numeri di build (20080213.1) senza utilizzare il BuildNumberOverrideTarget dove avrei dovuto generare il mio numero di build? Fondamentalmente voglio usare il generatore di buildtumber tfs predefinito/built-in, ma voglio accedervi per allineare le mie versioni di assembly con esso. Questo può essere fatto ed è un modo ragionevole per farlo in questo modo?Allineamento numeri di versione di montaggio con TFS BuildNumber
risposta
Sì, è possibile. Ad un certo punto, possibilmente su AfterGet, è possibile utilizzare BuildNumber e creare un'attività personalizzata per aggiornare i file AssemblyInfo.cs nel codice sorgente.
abbiamo agganciato in dopo Get e ha causato il nostro obiettivo di essere dipendente:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Il nostro obiettivo VersionAssemblies tira tutti i file AssemblyInfo.cs da $ (SolutionRoot):
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
assegni li fuori:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
li modifica e sostituisce la versione del file con $ (Buil DNumero):
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
e poi controlla i file di nuovo in:
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
Per la sostituzione delle versioni dei file che uso il compito File.Replace che viene fornito con il Microsoft SDC tasks su CodePlex.
Inoltre, se si dispone di una build attivata in un checkin, durante il check in dei file AssemblyInfo.cs, assicurarsi che il commento includa $ (NoCICheckinComment) in quanto ciò fa sì che TFS non attivi un'altra build altrimenti si ' Finiremo in un ciclo infinito di build.
Quello che chiediamo è molto sensibile e ci sono un certo numero di modi per raggiungere questo obiettivo.
Personalmente, quando faccio questo non mi piace controllare i file nel controllo di versione che hanno il numero generato dal server di generazione in essi - introduce solo troppi mal di testa quando si unisce il codice tra i rami ma anche io mi piace un numero di versione noto da utilizzare quando uno sviluppatore crea una workstation rispetto a un assembly derivato dal server di build appropriato per renderlo davvero semplice distinguerli.
Per ulteriori informazioni su come mi piace farlo, date un'occhiata al wiki TFS costruire Ricette:
o il mio post sul blog sul tema
Speranza che aiuti,
Martin.
Grazie, Martin. Avevo già trovato il tuo eccellente post sull'allineamento e ho usato quel metodo. Quando dici che ti piace un numero di versione noto da utilizzare nelle build sviluppate vuoi dire che quelle sarebbero quelle del file di informazioni dell'assembly senza alcuna sostituzione? ad esempio 1.0.0.0? – Fadeproof
Per gli sviluppatori usi solo la build VS o usi script di build che gli sviluppatori dovrebbero usare sulle loro workstation? – Fadeproof
Per gli sviluppatori uso solo la build VS. A volte uso build Builder Developer utilizzando lo script TeamBuild - tuttavia le build VS tendono a essere in grado di svolgere il lavoro il 90% delle volte e rendono le cose molto più semplici. In risposta al tuo commento precedente, io effettivamente uso 1.0.0.0 nei file AssemblyInfo. –
Come si fa a tirare la costruzione e la revisione da $ (BuildNumber), come lo è di default del formato "MyBuildDefinition_20090213.1"? – Fadeproof
È possibile scrivere un'attività personalizzata per rimuovere la parte MyBuildDefinition_ e eliminarla. –