Loupe

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.

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus