我正在使用TortoiseSVN和Visual Studio 2008。 有没有办法在每个构建中用svn的版本更新我的项目的assemblyinfo.cs?
例如,1.0.0。[svn的版本] - > 1.0.0.12
答案 0 :(得分:13)
您可以使用TortoiseSVN附带的SubWCRev工具(也可单独购买)。
从命令行运行它或使用它提供的COM-Object。
文件中的SubWCRev命令行工具replaces keywords,其中包含来自svn工作副本的信息。文档中显示example。
答案 1 :(得分:7)
我在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' />
使用community build tasks。这基本上将正则表达式应用于AssemblyInfo.cs,用svn修订版替换当前版本。
答案 2 :(得分:3)
您可以使用$Rev$
svn keyword,但这会为您提供该文件的最新修订版本,我想您希望获得HEAD
版本号。
看看这个问题:
答案 3 :(得分:2)
您对Visual Studio addin的看法感觉如何?
答案 4 :(得分:2)
是的,您可以添加一个调用脚本
的预构建事件svn info
以提取当前版本号(如果您之前进行了更新,则可以直接在文件中包含关键字$Revision$
,另请查看this post); 我通常做的是在构建项目时转换AssemblyInfo.cs模板。不幸的是,该脚本必须使$ Revision $的形式适应该文件的语法。
有趣的属性是(模板字符串在'$'之间):
[assembly: AssemblyVersion("$v$.$build$.$Last Changed Rev$")]
[assembly: AssemblyFileVersion("$v$.$build$.$Last Changed Rev$")]
编辑:svn info
是标准SVN客户端的一部分,而不是另一篇文章中指出的TortoiseSVN。虽然易于安装。但是,TortoiseSVN附带SubWCRev.exe
,它会使用关键字替换来转换文件,因此如果您更新本地副本,它就可以解决问题。
答案 5 :(得分:1)
在Visual Studio 2008中,您可以定义可以启动脚本或小程序的预构建事件。在此脚本或程序中,您可以使用 svnversion 命令获取存储库修订,然后解析AssemblyInfo.cs并将版本号修改为您想要的版本号。
我不确定TortoiseSVN是否带有svnversion,但它确实带有Windows SVN build provided by CollabNet
答案 6 :(得分:0)
我为SVN version plug-in创建了Build Version Increment project(以popester的答案命名)。此SVN插件将从您的工作副本中提取最新的更改修订版号,并允许您在您的版本号中使用它,这应该完全符合您的要求。