2017-09-19 2 views
0

Nous évaluons TFS On Premise, y compris la fonctionnalité de gestion des packages.Mise à jour de AssemblyInfo pendant la construction d'un package NuGet dans TFS

J'ai plusieurs configurations de construction qui créent avec succès des paquets NuGet et les publient dans le flux au sein de TFS.

Les versions du package sont contrôlées via le fichier AssemblyInfo.cs dans la solution. Par exemple: [assembly: AssemblyInformationalVersion("1.0.0.0")] donne une version 1.0.0.0 de NuGet; en utilisant AssemblyInformationalVersion parce que vous pouvez appliquer des étiquettes pré-version à votre version, comme [assembly: AssemblyInformationalVersion("1.0.0.0-dev")] résultant en verison 1.0.0.0-dev

Est-il possible de mettre en place la configuration de construction pour modifier la AssemblyInformationalVersion en fonction de la branche étant utilisée pour la construction?

Afin que nous puissions avoir [assembly: AssemblyInformationalVersion("1.0.0.0")] dans le code, mais lors de la construction de la branche « myNewFeature » il résultat dans « 1.0.0.0-myNewFeature » et la construction de maître peut entraîner « » 1.0.0.0" ? Plutôt que d'avoir à faire ce changement aux AssemblyInfo.cs fichier chaque fois que nous fusionnons vers une autre branche.

Répondre

1

pour mettre à jour le AssemblyInfo vous pouvez utiliser un script Powershell ou utiliser numéro de build à la version du package NuGet.

pour construire des définitions , $(SourceBranchName) peut être utilisé dans le format de numéro de build.La liste des variables disponibles est disponible ici - Predefined variables

Ainsi, lorsque vous générez des paquets Nuget à la fin de la construction, ils peuvent être versionnés en utilisant la version de la branche en cours de construction. Pour plus de détails s'il vous plaît se référer à cette question connexe: Use Branch Name in TFS 2015 Automated Build

Et pour le paquet de NuGet version vous pourriez aussi jeter un oeil au-dessous de blog qui donne un aperçu de l'emballage automatique versioning ici:

+0

Merci pour les liens utiles. J'ai réussi à concocter un script Powershell qui modifie AssemblyInformationalVersion dans mon fichier AssemblyInfo.cs – Darren

1

J'ai réussi à assembler un script Powershell qui est exécuté en tant que première étape de construction dans la configuration de construction.

J'utilise un code de ces 2 sources GithubGist pietergheysens/Update-AssemblyInfoVersionFiles.ps1 et aussi cette Stackoverflow répondre Get and Replace AssemblyVersion from AssemblyInfo.cs

Personnellement, je ne connais pas la syntaxe Powershell et le script suivant peut-être pas le plus approprié. Tout conseil sera apprécié.

Le script Powershell est aussi:

Param ( [Paramètre (Obligatoire = $ true)] [string] BRANCHNAME $, [string] $ projectDirectory )

$SrcPath = $env:BUILD_SOURCESDIRECTORY 
if ($projectDirectory -ne ""){ 
    $SrcPath = "$SrcPath$projectDirectory" 
}  

Write-Verbose "Executing Update-AssemblyInfoVersionFiles in path $SrcPath for product versionon branch $branchName" -Verbose 

if ($branchName.ToLower() -eq "master") 
{ 
    $branchName = "" 
} 
else 
{ 
    $branchName = "-$branchName" 
} 

$AllVersionFiles = Get-ChildItem $SrcPath AssemblyInfo.cs -recurse 
$pattern = '\[assembly: AssemblyInformationalVersion\("(.*)"\)\]' 
foreach ($file in $AllVersionFiles) 
{ 
    #version replacements 
    (Get-Content $file.FullName) | ForEach-Object{ 
     if($_ -match $pattern){ 
      # We have found the matching line 
      # Edit the version number and put back. 
      $currentVersion = [version]$matches[1] 
      Write-Verbose " $currentVersion" -Verbose 
      $newVersion = "$currentVersion$branchName" 
      '[assembly: AssemblyInformationalVersion("{0}")]' -f $newVersion 
      Write-Verbose "New AssemblyInformationalVersion is $newVersion" -Verbose 
     } else { 
      # Output line as is 
      $_ 
     } 
    } | Set-Content $file.FullName -Force 
} 
Write-Verbose "Transformed Assembly Informational Version is $assemblyInformationalVersion" -Verbose 

Mon l'étape de construction ressemble à ceci:

enter image description here

Cela modifie avec succès la version de l'assemblage pour moi, en fonction de la branche que j'utilise pour créer le package.