【问题标题】:AssemblyInfo.cs subversion and TortoiseSVNAssemblyInfo.cs 颠覆和 TortoiseSVN
【发布时间】:2010-12-09 22:48:09
【问题描述】:

我正在使用 TortoiseSVN 和 Visual Studio 2008。 有什么方法可以在每个构建中使用 svn 的版本更新我的项目的 assemblyinfo.cs?

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

【问题讨论】:

  • “我的项目的颠覆”不是指“我的项目的assemblyinfo.cs”吗?否则这句话对我来说毫无意义。

标签: c# svn tortoisesvn assemblyinfo


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我在我的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 版本。

    【讨论】:

    • 有什么方法可以在不安装的情况下使用这些构建任务?换句话说,是否可以将它们与源代码一起进行版本控制,以便开发人员不必了解它们或担心安装它们?
    • 是的,有可能。您必须对 dll 进行版本化(您将在此处找到代码:msbuildtasks.tigris.org)并编写以下行:。您必须为要使用的每个任务写一行。
    【解决方案3】:

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

    要么从命令行运行它,要么使用它提供的COM-Object。

    SubWCRev 命令行工具replaces keywords 位于一个文件中,其中包含来自您的 svn 工作副本的信息。文档中显示了example。

    【讨论】:

    • 但如果 AssembyInfo.cs 被修改,它会作为修改出现在工作副本中。如果您提交并重建它,它会再次更改。如何在不修改源代码控制下的文件的情况下做到这一点?
    • @Assaf:这就是为什么如果 AssemblyInfo.cs 文件是自动生成的,则不应检查它的原因。
    • @chiccodoro,我想你错过了我的问题的重点。版本字符串的一部分保持不变,一部分是自动生成的(最后一个数字)。
    • @Assaf:您保留一个 AssemblyInfo.template.cs 提交,并且从您的 msbuild 生成的每个构建的 AssemblyInfo.cs 您通过忽略它来防止它被颠覆。
    【解决方案4】:

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

    • 调用svn info提取当前修订号(如果之前进行过更新,可以直接在文件中包含关键字$Revision$,也可以查看this post);
    • 相应地修改您的 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,它使用关键字替换来转换文件,因此如果您更新本地副本,它就可以解决问题。

    【讨论】:

      【解决方案5】:

      你可以使用$Rev$svn keyword,但这会给你文件的最后一个版本,我想你想得到HEAD的版本号。

      看看这个问题:

      【讨论】:

        【解决方案6】:

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

        我不确定 TortoiseSVN 是否带有 svnversion,但它确实带有 Windows SVN build provided by CollabNet

        【讨论】:

          【解决方案7】:

          你觉得 Visual Studio addin 这样做怎么样?

          【讨论】:

          • 呵呵,不知道这个,看起来很有趣。
          • 看起来插件不允许使用 Subversion 修订号作为值。
          • 我为 Build Version Increment 项目创建了一个 SVN 版本插件 (happyturtle.codeplex.com)。这个 SVN 插件将从您的工作副本中提取最新的更改修订号,并允许您在您的版本号中使用它,这应该完全完成您正在尝试做的事情。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-16
          • 2010-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多