C# AssemblyInfo.cs subversion和TortoiseSVN

C# AssemblyInfo.cs subversion和TortoiseSVN,c#,svn,tortoisesvn,assemblyinfo,C#,Svn,Tortoisesvn,Assemblyinfo,我正在使用OrtoiseSVN和VisualStudio2008。 是否有任何方法可以在每次生成中使用svn的版本更新我的项目的assemblyinfo.cs 例如,1.0.0。[svn的版本]->1.0.0.12您对Visual Studio这样做有何看法?是的,您可以添加一个预构建事件,该事件调用 调用svn info提取当前修订号(如果您以前进行过更新,可以直接在文件中包含关键字$revision$,也可以选中) 相应地修改您的Properties\AssemblyInfo.cs文件

我正在使用OrtoiseSVN和VisualStudio2008。 是否有任何方法可以在每次生成中使用svn的版本更新我的项目的assemblyinfo.cs


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

您对Visual Studio这样做有何看法?

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

  • 调用
    svn info
    提取当前修订号(如果您以前进行过更新,可以直接在文件中包含关键字
    $revision$
    ,也可以选中)
  • 相应地修改您的Properties\AssemblyInfo.cs文件
我通常在构建项目时转换AssemblyInfo.cs模板。不幸的是,该脚本对于将$Revision$的形式适应此文件的语法是必需的

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


编辑:
svn info
是标准svn客户端的一部分,而不是另一篇文章中指出的龟甲vn。不过安装起来很容易。但是,TortoiseSVN附带了
SubWCRev.exe
,它使用关键字替换来转换文件,因此,如果您更新本地副本,它将起到作用。

在Visual Studio 2008中,您可以定义一个预构建事件来启动脚本或小程序。在此脚本或程序中,您可以使用svinversion命令获取存储库版本,然后解析AssemblyInfo.cs并根据需要修改版本号


我不确定TortoiseSVN是否带有svnversion,但它确实带有

您可以使用
$Rev$
,但这将为您提供文件的最后版本,我想您需要获得
版本号

看看这个问题:

您可以使用OrtoiseSVN附带的工具(也可单独提供)

可以从命令行运行它,也可以使用它提供的

SubWCRev命令行工具位于包含svn工作副本信息的文件中。文档中显示了一个。我在我的:



使用。这实际上是将正则表达式应用于AssemblyInfo.cs,将当前版本替换为svn版本。

我为创建了一个正则表达式(在popester的回答中命名)。此SVN插件将从您的工作副本中提取最新的更改版本号,并允许您在版本号中使用该版本号,这将完全完成您正在尝试执行的操作。

Heh,我不知道这个,看起来很有意思。但是,加载项不允许使用Subversion版本号作为值。我为Build version Increment项目创建了一个SVN版本插件()。此SVN插件将从您的工作副本中提取最新的更改修订号,并允许您在版本号中使用该修订号,这将完全完成您尝试执行的操作。但是,如果AssembyInfo.cs被修改,它将作为修改显示在工作副本中。如果您提交并重新生成它,它将再次更改。如果不修改受源代码管理的文件,如何做到这一点?@Assaf:这就是为什么如果AssemblyInfo.cs文件是自动生成的,就不应该签入该文件的原因。@chiccodoro,我想你错过了我问题的重点。版本字符串的一部分保持不变,另一部分自动生成(最后一个数字)。@Assaf:您保持提交的AssemblyInfo.template.cs,以及从msbuild生成的每个生成的AssemblyInfo.cs,您通过忽略它来防止subversion。您所说的“我的项目的subversion”不是指“我的项目的AssemblyInfo.cs”吗?否则这句话对我来说毫无意义。有没有办法不用安装就使用这些构建任务?换句话说,是否有可能将它们与源代码一起进行版本化,以便开发人员不必知道它们或担心安装它们?是的,这是可能的。您必须连接dll版本(您将在此处找到代码:)并编写以下行:。您必须为每个要使用的任务写一行。
[assembly: AssemblyVersion("$v$.$build$.$Last Changed Rev$")]
[assembly: AssemblyFileVersion("$v$.$build$.$Last Changed Rev$")]
<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' />