在Windows应用程序中编译时嵌入SVN版本号

19

我希望我的.exe文件可以访问包含我的svn版本的资源字符串。我可以手动输入,但我更希望有一种自动化的方式来在编译时嵌入这个版本信息。在Visual Studio 2008中是否有这样的能力?

5个回答

22

我希望实现类似的可用性,但发现 $Rev$ 不够用,因为它只在文件的修订版本更改时进行更新(这意味着每次必须编辑并提交该文件:这不是我想要的)。相反,我想要的是基于存储库的修订版本号。

对于我现在正在开发的项目,我编写了一个 Perl 脚本,从我的工作副本的最高级目录中运行 svnversion -n 命令,并将最近的修订信息输出到一个 .h 文件中(实际上,我将其与保存在非版本控制文件中的修订进行比较,以便我不会在每次编译时覆盖当前修订信息,但是否选择这样做由您决定)。我的应用程序代码和资源文件都引用了这个 .h 文件(或者根据您的方法引用了多个文件)以获取所需的信息。

这个脚本在构建前作为预构建步骤运行,以确保一切都是最新的,并且适当的文件会在您的构建工具自动重新构建。


9
TortoiseSVN有一个小助手工具名为SubWCRev.exe,它可以找到工作副本中最高已提交的修订版本号。 - dummy
很好知道!我的团队经常使用TortoiseSVN,所以当我编写脚本时,了解这个助手可能是很有用的。也许我会在某个时候研究一下SubWCRev.exe——摆脱对普通Subversion发行版的依赖可能是不错的选择... - antik
1
对于其他实现此想法的人的一个提示:考虑仅在本地实际进行更改时,让您的脚本编写一个新版本;即仅当svnversion输出的值在最终字符集中包含“M”时。这将允许您在提交后重新构建项目而不更改版本号。(有关其输出格式的说明,请参见svnversion文档。) - user473305
@SimonSouth 我们实际上做了类似的事情,所以当我们遇到修改过的、非版本化的构建时,会在这些构建中包含 M 来进行标识。 - antik
提交更改后,存储库的修订号码会发生变化吗? - rozina

16

可以考虑使用随TortoiseSVN一起提供的命令行工具SubWCRev。您需要创建一个包含类似 $WCREV$ $WCDATE$ 的标记的模板文件,然后在构建前运行 SubWCRev 来生成实际的源文件,并将其交给编译器。


4

如果这样可以解决问题的话,您可以获取SVN以嵌入它。请参阅该页面上的$Rev$关键字。


5
很不幸,$Rev$关键字只能提供包含它的文件最后一次被修改的修订版本。 - Greg Hewgill

4
请看svn关键字替换 这里。我通过谷歌找到了另一个SO问题 这里

3

我们使用的是antik的解决方案。注意不要使用环境变量,.h文件确保您可以有一个依赖项,这将导致任何需要它的文件在svn版本号更改时重新编译。


好的观点:我忘记了这是我们环境中的另一个好处。 - antik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接