毕业设计网站模板,搜索引擎提交入口,广州外贸型网站,wordpress页面标题标签持续构建需要标识出每次构建的版本#xff0c;而每次构建的时候人工去修改版本是不现实的。靠程序去添加版本号#xff0c;有3种可选#xff1a;1) 顺序流水号#xff1b;2) 时间戳#xff1b;3) SVN检出代码的修订版本号1) 顺序流水号。需要每次构建将上次记录的流水号1而每次构建的时候人工去修改版本是不现实的。靠程序去添加版本号有3种可选1) 顺序流水号2) 时间戳3) SVN检出代码的修订版本号1) 顺序流水号。需要每次构建将上次记录的流水号1再更新到版本中去。如果要记录每次构建的版本号需要提交到代码器不仅会造成代码修订版本1而且在构建时提交东东总是件不爽的事情。2) 时间戳。对比流水号来说靠谱多了就是太长就算以秒为单位一天也是86400的增量3) SVN检出代码时的修订版本号。最靠谱的还是这个代码有更新版本号增加代码没更新版本号不变。通常情况下代码不变构建结果基本上不需要有差异所以选这个啦当然这篇博文的关键不在这里关键是咋才能让MSBuild在构建的时候去取得版本号并且替换掉AssemblyInfo.cs中的AssemblyVersion或AssemblyFileVersion。这要靠原生的MSBuild Task似乎是办不到自己写Task太累。所以找了个第三方的TaskMSBuild Community Tasks。其实这已经不是第一次接触 MSBuild Community Tasks 了上次使用它是因为需要在项目构建时将生成的结果打包成压缩文件所以用到了它的 Zip Task。而这次需要用到它两个TaskSvnVersion Task用来获取代码的SVN修订版本号FileUpdate用来更新AssemblyInfo.cs文件下面是实验环境和代码首先是项目目录结构test.xml就是 MSBuild 构建脚本C:.
├─build
│ │ test.xml
│ │
│ └─msbuildtasks
│ MSBuild.Community.Tasks.dll
│ MSBuild.Community.Tasks.Targets
│
└─MyProject└─PropertiesAssemblyInfo.cs构建脚本只干了一件事件就是更新 AssemblyInfo.cs 中两个版本号的最后一位修订版本号。?xml version1.0 encodingutf-8?
Project ToolsVersion4.0 DefaultTargetsTest xmlnshttp://schemas.microsoft.com/developer/msbuild/2003Import Projectmsbuildtasks\MSBuild.Community.Tasks.Targets /PropertyGroupMSBuildCommunityTasksLib$([MSBUILD]::Unescape(MSBuild.Community.Tasks.dll))/MSBuildCommunityTasksLib/PropertyGroupTarget NameTestItemGroupAssemblyInfos Include..\MyProject\**\AssemblyInfo.cs //ItemGroupSvnVersion LocalPath.Output TaskParameterRevision PropertyNameRevision //SvnVersionMessage TextRevision: $(Revision) /FileUpdate Files(AssemblyInfos)Regex\(quot;(\d\.\d\.\d\.)\dquot;\)\]ReplacementText(quot;${1}$(Revision)quot;)] //Target
/Project稍稍解释一下脚本 Import Projectmsbuildtasks\MSBuild.Community.Tasks.Targets /PropertyGroupMSBuildCommunityTasksLib$([MSBUILD]::Unescape(MSBuild.Community.Tasks.dll))/MSBuildCommunityTasksLib/PropertyGroup这里是引入 MSBuild Community Tasks 的动态库官方写法照抄就是了 ItemGroupAssemblyInfos Include..\MyProject\**\AssemblyInfo.cs //ItemGroup这里把所有 AssemblyInfo.cs 找出来这样可以将一个解决方案中多个项目的版本号一起更新了。 SvnVersion LocalPath.Output TaskParameterRevision PropertyNameRevision //SvnVersion这里很明显就是在取当前代码的SVN修订版本号了LocalPath指定了取哪个目录的版本号Output则将取到的修订版本号输出到“Revision”这个属性中关于Output可以参考 http://msdn.microsoft.com/zh-cn/library/ms164287.aspx需要注意的是在 PATH 路径中可以找到 svnversion 命令。如果没有设置 PATH可以使用 ToolPath 参数指定 svnversion 所在目录。 FileUpdate Files(AssemblyInfos)Regex\(quot;(\d\.\d\.\d\.)\dquot;\)\]ReplacementText(quot;${1}$(Revision)quot;)] /这部分就是通过正则表达式查找替换版本号了。有时有两点需要注意一是在写引号的时候需要用quot;代替二是在替换字符串中最好用${1}代替$1这种写法因为后面的$(Revision)也是数字如果不用大括号连起来就可能变成 $1123 这样不能被正确识别用一大括号就是 ${1}123 这样了不会出错。