Charger dans vos variables de build celles contenues dans un fichier assemblyinfo
Une chose qui m'arrive régulièrement quand je mets en place des builds automatisées, c'est de devoir traiter les numéros de version dynamiquement.
Pour ce faire, en général, je récupère ce numéro de version dans un fichier AssemblyInfo.cs (cela dépend de la technologie utilisée).
Dans ce premier article sur le sujet, je vous explique comment utiliser PowerShell et les expressions régulières dans vos build pour récupérer n'importe quelle variable au sein d'un fichier assemblyInfo.cs afin de le traiter par la suite.
param( [string]$file, [string]$prefix = "" ) # Reading File $content = Get-Content -Path $file # Get uncommented values $regex = '^\s*\[assembly:\s*(\w+)\s*\(\s*"(.+)"\s*\)\s*\]' foreach($line in $content) { if($line -match $regex){ $key = $Matches[1] $value = $Matches[2] # Write variable for build Write-Host "##vso[task.setvariable variable=$prefix$key]$value" } }
Cette méthode accepte 2 arguments :
- file [obligatoire] : chemin du fichier assemblyinfo.cs
- prefix [optionnel] : préfixe apposé au nom de variable, par exemple si nous voulons dans une tâche de build récupérer des variables de plusieurs fichiers sans écraser les précédents
Par exemple, si je cherche le numéro de version de mon site web, en utilisant en prefix IS., la variable sera chargée en tant que IS.AssemblyVersion (utilisée dans les exemples ci-dessous).
Attention toutefois :
- Les blocs de commentaires ne sont pas pris en compte (par contre en début de ligne oui)
- Si jamais la même variable existe plusieurs fois ça sera la dernière qui sera prise en compte
Par la suite, je suis en mesure de récupérer et d'exploiter facilement ces variables dans le cadre de cette build :
- En utilisant la notation $(IS.AssemblyVersion) dans les tâches de build
- Sous la forme $env:IS_ASSEMBLYVERSION en PowerShell (Remplacer les points . par underscore _)
- Via %IS_ASSEMBLYVERSION% en Shell (Remplacer les points . par underscore _)
Plus d'informations sur les variables sur le site de Microsoft
Il est bien sûr possible d'utiliser la classe ConfigurationManager pour exploiter via PowerShell les données d'un AssemblyInfo, mais je trouve cette solution plus complexe et moins performante qu'une simple expression régulière.
Commentaires