AssemblyInfo.cs子版本和TortoiseSVN

17
我正在使用TortoiseSVN和Visual Studio 2008。 是否有办法在每次构建时使用svn的版本更新我的项目的assemblyinfo.cs?
例如,1.0.0.[svn的版本] -> 1.0.0.12

“我的项目的Subversion”,你是不是指“我的项目的AssemblyInfo.cs”?否则这句话对我来说没有意义。 - chiccodoro
7个回答

13

6
如果修改了AssemblyInfo.cs文件,它将出现在工作副本中并被视为一种修改。如果您提交并重新生成它,它会再次更改。如何在不修改受源代码控制的文件的情况下完成这个操作? - Assaf Lavie
@Assaf:这就是为什么不应该检查AssemblyInfo.cs文件,如果它是自动生成的。 - chiccodoro
@chiccodoro,我想你没有理解我的问题重点。版本字符串的一部分保持不变,另一部分是自动生成的(最后一个数字)。 - Assaf Lavie
5
你需要保留一个名为AssemblyInfo.template.cs的文件,并在每次构建时通过msbuild生成一个名为AssemblyInfo.cs的文件。你可以通过忽略这个文件来避免将其纳入版本控制中。 - Julien Roncaglia

7

我在我的构建脚本中这样做:

<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' />

使用社区构建任务。这基本上是对AssemblyInfo.cs应用正则表达式,将当前版本替换为svn版本。

有没有办法在不安装它们的情况下使用这些构建任务?换句话说,是否可能将它们与源代码一起进行版本控制,以便开发人员无需了解它们或担心安装它们? - jpierson
1
是的,这是可能的。您必须对dll进行版本控制(您可以在此处找到代码:http://msbuildtasks.tigris.org/),并编写以下行:<UsingTask AssemblyFile="NameOfTheDll.dll" TaskName="SvnInfo"/>。您将需要为每个要使用的任务编写一行。 - Benjamin Baumann

3

2

嘿,不知道这个,看起来很有趣。 - RedGlyph
似乎该插件不支持使用Subversion修订号作为值。 - Lasse V. Karlsen
我为Build Version Increment项目创建了一个SVN版本插件(http://happyturtle.codeplex.com/)。这个SVN插件将从你的工作副本中提取最新的变更修订号,并允许你在你的版本号中使用它,这应该正好实现了你想要做的事情。 - grimus

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,它可以转换带有关键字替换的文件,因此如果您更新本地副本,则可以使用它。


1
在Visual Studio 2008中,您可以定义一个预构建事件,该事件可以启动脚本或小程序。在此脚本或程序中,您可以使用svnversion命令获取存储库版本,然后解析您的AssemblyInfo.cs并修改版本号为所需版本。
我不确定TortoiseSVN是否带有svnversion,但它确实带有CollabNet提供的Windows SVN构建

0

我为Build Version Increment项目(由popester回答中提到的)创建了一个SVN版本插件。这个SVN插件将从你的工作副本中获取最新的变更修订号,并允许你在你的版本号中使用它,这应该正好实现了你想要做的事情。


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