Il est intéressant d'afficher en bas de votre site Web, une version comme: v.1.10.2

Pourquoi afficher une version en bas de mon site ?

Si vous utilisez dans vos développements plusieurs environnements, vous ne savez plus si la version de DEV est bien la dernière version, si la version STAGING (QA) est la précédente version et si en PRODUCTION on a bien la même version qu'en STAGING (QA), du coup c'est sympa d'afficher dans le footer en bas, la dernière version de votre site.

Comment faire ?

Il suffit d'un un projet MVC ASP.Net par exemple d'ajouter en bas de la page _layout.cshtml (normalement dans /Views/Shared:_layout.cshtml) ceci:

<footer>
    <span>Copyright &copy; [MonSite] 2019 - <!-- version -->v1.0.0.0<!-- version --> </span>
</footer>

J'ai ajouté donc ceci dans mon footer:

<!-- version -->v1.0.0.0<!-- version -->

Ensuite, vous devez créer un fichier VBscript nommé "ScriptChangeVersion.vbs" dans la racine de votre solution ASP.Net avec le code suivant:

'*** BY Dado 08/05/2019
'*** Change automatically a string in a File .aspx or .ascx or .cshtml on each Build through Visual Studio

'Take one or more aguments
'Normally we must have minimum one argument, the path of the current script
'Visual Studio doesn't give per default the Current Directory: File.GetAbsolutePathName(".") return Empty string
Set oArgs=WScript.Arguments

'Instance Regex object for line
Set regex = new RegExp
regex.Pattern = "<!-- date -->[^<]+<!-- date -->"
regex.IgnoreCase = true
regex.Global = true

'Instance Regex object for version
Set regexVersion = new RegExp
regexVersion.Pattern = "<!-- version -->v?\.?([\d]*)\.?([\d]*)\.?([\d]*)\.?([\d]*)<!-- version -->"
regexVersion.IgnoreCase = true
regexVersion.Global = true

'This is the temporary file to work on it
tmpFile = "c:\windows\temp\tempFooter.txt"

'Instance Object
Set Shell = CreateObject("WScript.Shell")
Set File = CreateObject("Scripting.FileSystemObject")

'If you execute this script manually, you can retrieve the path but not through Visual Studio
'currentDirectory = File.GetAbsolutePathName(".")



'Get the file
fileName = oArgs(0) & "Views\Shared\_Layout.cshtml"

'Open this file and create a new one
Set CurrentFile = File.OpenTextFile(fileName)
Set OutputFile = File.CreateTextFile(tmpFile,True)
If Not File.FileExists(fileName) Then
Wscript.Echo "This file is not found: " & fileName
Return
Else
Wscript.Echo "Found file: " & fileName
End If
'Parse each line
Do Until CurrentFile.AtEndOfStream
    'Read the line
    strLine = CurrentFile.ReadLine
    'Check if RegEx found the pattern
    If regex.Test(strLine) Then
        'Change the line
    	strLine = regex.Replace(strLine, "<!-- date -->(" & Right("0" & Day(Now), 2) & "/"& Right("0" & Month(Now), 2) & "/" & Year(Now)& " "& Right("0" & Hour(Now), 2) & ":"& Right("0" & Minute(Now),2) & ")<!-- date -->")
        'Change the Version
    End If 
	
	If regexVersion.Test(strLine) Then
            'Change Version
            version = regexVersion.Execute(strLine)(0).SubMatches(0) '[v.1.0.3]
			WScript.Echo "version found: " & version
            maxNumber = regexVersion.Execute(strLine)(0).SubMatches(1)
			WScript.Echo "maxNumber found: " & maxNumber
			mediumNumber = regexVersion.Execute(strLine)(0).SubMatches(2)
			WScript.Echo "mediumNumber found: " & mediumNumber
			minorNumber = regexVersion.Execute(strLine)(0).SubMatches(3)
			WScript.Echo "minorNumber found: " & minorNumber

			If version = "" Then
				version = 1
			End If
			If maxNumber = "" Then
				maxNumber = 0
			End If
			If mediumNumber = "" Then
				mediumNumber = 0
			End If	
			If minorNumber = "" Then
				minorNumber = 0
			End If			
			
			minorNumber = minorNumber + 1
			if minorNumber = 100 Then
				minorNumber = 0
				mediumNumber = mediumNumber + 1
				if mediumNumber = 100 Then
					mediumNumber = 0
					maxNumber = maxNumber + 1
					If maxNumber = 100 Then
						maxNumber = 0
						version = version + 1
					End if
				End If
			End If
            
			newVersion = "<!-- version -->v." & version & "." & maxNumber & "." & mediumNumber & "." & minorNumber & "<!-- version -->"
			WScript.Echo "Change version to : " & newVersion
			strLine = regexVersion.Replace(strLine, newVersion)

        End If
    'Write the line
    'WScript.Echo strLine
    OutputFile.Write(strLine & vbCrLf)
Loop
'Close All
OutputFile.Close
CurrentFile.Close

'Delete the orginal file
File.DeleteFile(fileName)
'Rename the temporary file
File.MoveFile tmpFile,fileName 

'GET Full Control permission on this file
Shell.Run "cacls " & fileName & " /E /T /C /G ""Everyone"":F ", 2, True

Ce script une fois exécuter va charger la page _layout.cshtml, chercher ou se trouve la version indiquée entre les balises <!-- version --> et sauvegarder le tout !

Pour mettre tout cela maintenant automatiquement, il faut dans votre solution ASP.Net créer un événement POST BUILD (après le build de votre solution) comme ceci:

Vous mettez la ligne suivante:

if "$(ConfigurationName)" == "Debug" cscript /nologo $(SolutionDir)ScriptChangeVersion.vbs "$(ProjectDir)"

A chaque fois que vous ferez un build de votre solution en mode DEBUG, le script .vbs va être exécuter et va changer la version de votre page dans le footer.

Votre version s'incrémentera automatiquement, comme ceci:

v1.0.0.0
v1.0.0.1
v1.0.0.2
...
v1.0.0.99
v1.0.1.0
v1.0.1.1
...
v1.0.99.99
v1.1.0.0
...
v1.99.99.99
v2.0.0.0

Voilà ! A vous maintenant de faire quelques changements dans le script si vous le désirez.

J'ai ajoutez aussi dans le script la possibilité de mettre la date du build, il suffit d'ajouter les balises <!-- date -->  ... <!-- date --> quelques part dans votre page.