我正在使用 TortoiseSVN 和 Visual Studio 2008。有没有办法在每次构建中使用 svn 版本更新我的项目的 assemblyinfo.cs?
例如,1.0.0.[svn 的版本] -> 1.0.0.12
我正在使用 TortoiseSVN 和 Visual Studio 2008。有没有办法在每次构建中使用 svn 版本更新我的项目的 assemblyinfo.cs?
例如,1.0.0.[svn 的版本] -> 1.0.0.12
您可以使用TortoiseSVN 附带的SubWCRev工具(也可以单独购买)。
从命令行运行它或使用它提供的COM-Object。
I do this in my build script:
<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' />
using the community build tasks. This essentially applies a regex to the AssemblyInfo.cs, replacing the current revision with the svn revision.
您如何看待 Visual Studio插件执行此操作?
是的,您可以添加一个调用脚本的预构建事件
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
用关键字替换来转换文件,所以如果你更新你的本地副本,它就可以解决问题。
在 Visual Studio 2008 中,您可以定义可以启动脚本或小程序的预生成事件。在此脚本或程序中,您可以使用svnversion命令获取存储库修订,然后解析您的 AssemblyInfo.cs 并将版本号修改为您想要的。
我不确定 TortoiseSVN 是否带有 svnversion,但它确实带有CollabNet 提供的 Windows SVN 版本
我为Build Version Increment 项目(在 popester 的答案中命名)创建了一个SVN 版本插件。这个 SVN 插件将从您的工作副本中提取最新的更改修订号,并允许您在您的版本号中使用它,这应该完全完成您想要做的事情。