我正在使用TortoiseSVN和Visual Studio 2008。
是否有办法在每次构建时使用svn的版本更新我的项目的assemblyinfo.cs?
例如,1.0.0.[svn的版本] -> 1.0.0.12
例如,1.0.0.[svn的版本] -> 1.0.0.12
我在我的构建脚本中这样做:
<SvnInfo LocalPath=".">
<Output TaskParameter="Revision" PropertyName="BuildRev" />
</SvnInfo>
<FileUpdate Files="protobuf-net\Properties\AssemblyInfo.cs"
Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='$1.$2.$(BuildRev)$5' />
是的,你可以添加一个调用脚本的预构建事件:
svn info
来提取当前版本号(如果在更新之前这样做,可以直接在文件中包含关键字$Revision$
,还可以参考此帖子);我通常在项目构建时转换一个AssemblyInfo.cs模板。需要使用脚本来将$Revision$的形式调整为该文件的语法,不幸的是。
有趣的属性是(其中模板字符串在'$'之间):
[assembly: AssemblyVersion("$v$.$build$.$Last Changed Rev$")]
[assembly: AssemblyFileVersion("$v$.$build$.$Last Changed Rev$")]
编辑:如另一个帖子所指出的那样,svn info
是标准SVN客户端的一部分,而不是TortoiseSVN。容易安装。然而,TortoiseSVN附带了SubWCRev.exe
,它可以转换带有关键字替换的文件,因此如果您更新本地副本,则可以使用它。
我为Build Version Increment项目(由popester回答中提到的)创建了一个SVN版本插件。这个SVN插件将从你的工作副本中获取最新的变更修订号,并允许你在你的版本号中使用它,这应该正好实现了你想要做的事情。