有没有办法自动增加ClickOnce部署中的"最低要求版本"字段,以始终等于当前的内部版本号?基本上,我总是希望我的部署在启动时自动更新.
我怀疑我需要一些前/后构建的事件,但我希望有一个更简单的方法.
我可能有点迟到回答这个问题,但我发现很难在谷歌上找到解决方案,但最终想出来,以为我会分享.
使用MSBuild版本4(VS2010和VS2012),可以通过插入以下目标来实现:
$(ApplicationVersion)与您在VS IDE中项目的"发布"窗口中手动设置的设置相同,修订部分设置为星号.$(ApplicationRevision)是用于发布版本的实际修订版.FormatVersion任务是一个内置的MSBuild任务,它将两者格式化为一个完整的版本号.
这将"最低要求版本"设置为与"发布版本"相同,因此确保用户始终安装新部署,即无法跳过更新.
当然,如果您不想将最低要求版本设置为发布版本并且想要使用不同的源属性,则可以直接修改目标,但原理是相同的.
我最终实际上滚动了一个AddIn到VS,同步所有版本号,然后只需单击即可构建和发布.这很简单.
Public Sub Publish() Try Dim startProjName As String = Nothing Dim targetProj As Project = Nothing Dim soln As Solution2 = TryCast(Me._applicationObject.DTE.Solution, Solution2) If soln IsNot Nothing Then For Each prop As [Property] In soln.Properties If prop.Name = "StartupProject" Then startProjName = prop.Value.ToString() Exit For End If Next If startProjName IsNot Nothing Then For Each proj As Project In soln.Projects If proj.Name = startProjName Then targetProj = proj Exit For End If Next If targetProj IsNot Nothing Then Dim currAssemVersionString As String = targetProj.Properties.Item("AssemblyVersion").Value.ToString Dim currAssemVer As New Version(currAssemVersionString) Dim newAssemVer As New Version(currAssemVer.Major, currAssemVer.Minor, currAssemVer.Build, currAssemVer.Revision + 1) targetProj.Properties.Item("AssemblyVersion").Value = newAssemVer.ToString() targetProj.Properties.Item("AssemblyFileVersion").Value = newAssemVer.ToString() Dim publishProps As Properties = TryCast(targetProj.Properties.Item("Publish").Value, Properties) Dim shouldPublish As Boolean = False If publishProps IsNot Nothing Then shouldPublish = CBool(publishProps.Item("Install").Value) If shouldPublish Then targetProj.Properties.Item("GenerateManifests").Value = "true" publishProps.Item("ApplicationVersion").Value = newAssemVer.ToString() publishProps.Item("MinimumRequiredVersion").Value = newAssemVer.ToString() publishProps.Item("ApplicationRevision").Value = newAssemVer.Revision.ToString() End If End If targetProj.Save() Dim build As SolutionBuild2 = TryCast(soln.SolutionBuild, SolutionBuild2) If build IsNot Nothing Then build.Clean(True) build.Build(True) If shouldPublish Then If build.LastBuildInfo = 0 Then build.Publish(True) End If End If End If End If End If End If Catch ex As Exception MsgBox(ex.ToString) End Try End Sub
开箱即用,我不相信有办法.然而,旋转自己并不是太费劲.
我使用的方法如下:
1)创建Version.Properties文件
1 11 25 0 $(Util-VersionMajor).$(Util-VersionMinor).$(Util-VersionBuild).$(Util-VersionRevision) $(Util-VersionMajor)_$(Util-VersionMinor)_$(Util-VersionBuild)_$(Util-VersionRevision) $(Util-VersionDots) $(Util-VersionDots) $(Util-VersionRevision)
2)将Version.Properties文件导入项目文件
3)创建一个任务以增加Build上的版本.这是我的
@(Util-VersionProjectFileItem->'%(FullPath)')
这里有一些额外的clickonce技巧http://weblogs.asp.net/sweinstein/archive/2008/08/24/top-5-secrets-of-net-desktop-deployment-wizards.aspx