自动增量版本的安装项目

时间:2016-02-15 07:07:51

标签: c# vbscript setup-project

我需要在每次成功构建时增加安装程序的版本。我添加了一个VBscript文件,并从预构建事件中调用它。但我无法得到实际结果。我的脚本如下:

set a = wscript.arguments
if a.count = 0 then wscript.quit 1

'read and backup project file
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(a(0))
s = f.ReadAll
f.Close
fbak = a(0) & ".bak"
if fso.fileexists(fbak) then fso.deletefile fbak
fso.movefile a(0), fbak

'find, increment and replace version number
set re = new regexp
re.global = true
re.pattern = "(""ProductVersion"" = ""8:)(\d+(\.\d+)+)"""
set m = re.execute(s)
v = m(0).submatches(1)
v1 = split(v, ".")
v1(ubound(v1)) = v1(ubound(v1)) + 1
vnew = join(v1, ".")
'msgbox v & " --> " & vnew
s = re.replace(s, "$1" & vnew & """")

'replace ProductCode
re.pattern = "(""ProductCode"" = ""8:)(\{.+\})"""
guid = CreateObject("Scriptlet.TypeLib").Guid
guid = left(guid, len(guid) - 2)
s = re.replace(s, "$1" & guid & """")

'replace PackageCode
re.pattern = "(""PackageCode"" = ""8:)(\{.+\})"""
guid = CreateObject("Scriptlet.TypeLib").Guid
guid = left(guid, len(guid) - 2)
s = re.replace(s, "$1" & guid & """")

'write project file
fnew = a(0)
set f = fso.CreateTextfile(fnew, true)
f.write(s)
f.close

我的预构建事件为C:\ Projects \ VersionProject \ myscript.vbs" $(ProjectDir)VersionProject.Installer.vdproj" 。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您需要进入vdproj文件并找到“ProductVersion”=“8:1.0.0”形式的字符串
并将字符串从(例如)1.0.0更改为1.0.1。

然而,如果您改变了,那么您可能会遇到更新问题。请注意,当您在安装项目中增加ProductVersion时,它会提示更改ProductCode,并且还会更改MSI文件的PackageCode。因此版本的安全更改涉及所有这些事情。例如,如果仅更改版本并尝试重新安装MSI,则将失败并显示“已安装此产品的另一个版本”。如果您不了解这些内容,我建议您熟悉ProductCode,UpgradeCode,ProductVersion如何与RemovePreviousVersions进行交互,并注意每个新创建的MSI都需要一个新的PackageCode。

答案 1 :(得分:-2)

看看this。此插件允许您为项目中的版本号设置各种选项。

它完全符合您的需求,自动增加每个版本的版本号。我多年来一直在使用它,从来没有遇到任何问题。

<强>更新

此插件仅在您的项目有AssemblyInfo.cs

时才有效