17

我正在使用 TortoiseSVN 和 Visual Studio 2008。有没有办法在每次构建中使用 svn 版本更新我的项目的 assemblyinfo.cs?

例如,1.0.0.[svn 的版本] -> 1.0.0.12

4

7 回答 7

13

您可以使用TortoiseSVN 附带的SubWCRev工具(也可以单独购买)。

从命令行运行它或使用它提供的COM-Object

SubWCRev 命令行工具将文件中的关键字替换为 svn 工作副本中的信息。文档中显示了一个示例。

于 2009-10-25T19:13:44.900 回答
7

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.

于 2009-10-25T20:33:47.140 回答
3

您可以使用$Rev$ svn 关键字,但这会给您文件的最后修订,我认为您想获得HEAD修订号。

看看这个问题:

于 2009-10-25T18:47:30.943 回答
2

您如何看待 Visual Studio插件执行此操作?

于 2009-10-25T18:43:29.847 回答
2

是的,您可以添加一个调用脚本的预构建事件

  • 调用svn info以提取当前修订号(如果您之前进行过更新,您可以直接将关键字包含$Revision$在文件中,也可以查看这篇文章);
  • 相应地修改您的 Properties\AssemblyInfo.cs 文件。

我通常做的是在构建项目时转换一个 AssemblyInfo.cs 模板。不幸的是,该脚本是使 $Revision$ 的形式适应该文件的语法所必需的。

有趣的属性是(模板字符串在'$'之间):

[assembly: AssemblyVersion("$v$.$build$.$Last Changed Rev$")]
[assembly: AssemblyFileVersion("$v$.$build$.$Last Changed Rev$")]

编辑:svn info是标准 SVN 客户端的一部分,而不是另一篇文章中指出的 TortoiseSVN。虽然很容易安装。然而,TortoiseSVN 附带了SubWCRev.exe用关键字替换来转换文件,所以如果你更新你的本地副本,它就可以解决问题。

于 2009-10-25T18:45:58.110 回答
1

在 Visual Studio 2008 中,您可以定义可以启动脚本或小程序的预生成事件。在此脚本或程序中,您可以使用svnversion命令获取存储库修订,然后解析您的 AssemblyInfo.cs 并将版本号修改为您想要的。

我不确定 TortoiseSVN 是否带有 svnversion,但它确实带有CollabNet 提供的 Windows SVN 版本

于 2009-10-25T18:47:13.660 回答
0

我为Build Version Increment 项目(在 popester 的答案中命名)创建了一个SVN 版本插件。这个 SVN 插件将从您的工作副本中提取最新的更改修订号,并允许您在您的版本号中使用它,这应该完全完成您想要做的事情。

于 2010-04-12T01:27:06.277 回答