ASP.Net:自动增加并显示您网站的最新版本

在您的网站底部显示一个版本,例如:v.1.10.2 是很有趣的

为什么要在我的网站底部显示一个版本?

如果您在开发中使用多个环境,您可能不知道 DEV 版本是否是最新版本,STAGING (QA) 版本是否是先前版本,以及在 PRODUCTION 中是否与 STAGING (QA) 版本相同,因此在底部显示您网站的最新版本是很好的。

怎么做?

只需在一个 MVC ASP.Net 项目中,在页面 _layout.cshtml 的底部(通常在 /Views/Shared:_layout.cshtml 中)添加以下内容:

<footer>
    <span>版权所有 &copy; [MonSite] 2019 - <!-- version -->v1.0.0.0<!-- version --> </span>
</footer>

因此,我在我的页脚中添加了以下内容:

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

接下来,您需要在您的 ASP.Net 解决方案根目录中创建一个名为 "ScriptChangeVersion.vbs" 的 VBscript 文件,内容如下:

'*** BY Dado 08/05/2019
'*** 在每次通过 Visual Studio 构建时自动更改 .aspx 或 .ascx 或 .cshtml 文件中的字符串

'获取一个或多个参数
'通常我们必须至少有一个参数,即当前脚本的路径
'Visual Studio 默认不提供当前目录:File.GetAbsolutePathName(".") 返回空字符串
Set oArgs=WScript.Arguments

'实例化 Regex 对象以处理行
Set regex = new RegExp
regex.Pattern = "<!-- date -->[^<]+<!-- date -->"
regex.IgnoreCase = true
regex.Global = true

'实例化 Regex 对象以处理版本
Set regexVersion = new RegExp
regexVersion.Pattern = "<!-- version -->v?\.?([\d]*)\.?([\d]*)\.?([\d]*)\.?([\d]*)<!-- version -->"
regexVersion.IgnoreCase = true
regexVersion.Global = true

'这是要处理的临时文件
tmpFile = "c:\windows\temp\tempFooter.txt"

'实例化对象
Set Shell = CreateObject("WScript.Shell")
Set File = CreateObject("Scripting.FileSystemObject")

'如果您手动执行此脚本,您可以检索路径,但通过 Visual Studio 不行
'currentDirectory = File.GetAbsolutePathName(".") 

'获取文件
fileName = oArgs(0) & "Views\Shared\_Layout.cshtml"

'打开此文件并创建一个新文件
Set CurrentFile = File.OpenTextFile(fileName)
Set OutputFile = File.CreateTextFile(tmpFile,True)
If Not File.FileExists(fileName) Then
Wscript.Echo "未找到此文件: " & fileName
Return
Else
Wscript.Echo "找到文件: " & fileName
End If
'解析每一行
Do Until CurrentFile.AtEndOfStream
    '读取行
    strLine = CurrentFile.ReadLine
    '检查 RegEx 是否找到模式
    If regex.Test(strLine) Then
        '更改行
    	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 -->")
        '更改版本
    End If

	If regexVersion.Test(strLine) Then
            '更改版本
            version = regexVersion.Execute(strLine)(0).SubMatches(0) '[v.1.0.3]
			WScript.Echo "找到版本: " & version
            maxNumber = regexVersion.Execute(strLine)(0).SubMatches(1)
			WScript.Echo "找到最大数字: " & maxNumber
			mediumNumber = regexVersion.Execute(strLine)(0).SubMatches(2)
			WScript.Echo "找到中间数字: " & mediumNumber
			minorNumber = regexVersion.Execute(strLine)(0).SubMatches(3)
			WScript.Echo "找到次要数字: " & 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 "将版本更改为: " & newVersion
			strLine = regexVersion.Replace(strLine, newVersion)

        End If
    '写入行
    'WScript.Echo strLine
    OutputFile.Write(strLine & vbCrLf)
Loop
'关闭所有
OutputFile.Close
CurrentFile.Close

'删除原始文件
File.DeleteFile(fileName)
'重命名临时文件
File.MoveFile tmpFile,fileName

'获取该文件的完全控制权限
Shell.Run "cacls " & fileName & " /E /T /C /G ""Everyone"":F ", 2, True

此脚本一旦执行,将加载页面 _layout.cshtml,查找位于 <!-- version --> 标签之间的版本,并保存所有内容!

要自动化这一切,您需要在您的 ASP.Net 解决方案中创建一个 POST BUILD 事件(在构建您的解决方案后),如下所示:

您添加以下行:

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

每次您以 DEBUG 模式构建您的解决方案时,.vbs 脚本将被执行,并将更改您页面底部的版本。

您的版本将自动递增,如下所示:

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

好了!现在轮到您在脚本中进行一些更改,如果您愿意的话。

我还在脚本中添加了一个功能,可以显示构建日期,只需在您的页面中添加标签 <!-- date -->  ... <!-- date -->。

Aucun commentaire pour le moment.

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙