代码之家  ›  专栏  ›  技术社区  ›  Ogre Psalm33

使用Visual Studio和.NET跟踪生成中的文件级版本控制?

  •  1
  • Ogre Psalm33  · 技术社区  · 15 年前

    我希望一个工具或技术能够回答这个问题:“哪个版本的文件x被用来构建程序集abc.dll?”我最近搬到了一个.NET开发小组,这个问题似乎总是以一种或另一种形式出现,而我们对此没有太多的把握。有人会说“嘿,你的最新代码在测试服务器上吗?”答案是不可避免的,比如“我不知道”。

    在Unix开发的旧时代(我在这里约会),SCCS源代码控制系统 special keywords 例如,您可以将%i%(版本)和%m%(模块名)放在文件中,只要签出该文件,就会用相应的SCCS版本信息替换这些信息。因此,一个很好的技巧就是为源文件中的“%i%%m%”分配一个常量字符串,编译,然后运行 Unix "strings" command 在生成的库中确定用于生成该文件的文件的版本。

    我做了一个快速测试,在C类文件中滚动自己的文件,如下所示:

    public const String VERSION_STRING = "*VERSION* = MyClass 1.0";
    

    然后在我的dll目录上运行此命令行:

    >for %f in (*.dll) do find "VERSION" %f
    

    但结果是:

    ---------- MYASSEMBLY.DLL
    VERSION_STRING
    

    这并不是我想要的(它给了我常量的名称,但我没有尝试在类中手动嵌入的版本信息)。

    就其价值而言,我们目前正在使用ClearCase进行版本控制(目前是公司标准)。ClearCase有一些工具可以帮助我们(例如 clearaudit 但是这需要一些努力来改进和重新调整我们的构建过程。我还应该提到,我们正在考虑进行颠覆活动。因此,我猜在任何版本控制系统或构建环境(msbuild、nant、cruisecontrol)中与.net一起工作的解决方案都是公平的。

    是否有其他解决方案,特别是以.NET为中心的解决方案,用于跟踪哪个文件版本进入了哪个程序集中?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Community Mr_and_Mrs_D    7 年前

    我们很快就放弃了使用特殊关键字的想法,因为将元数据(如版本号)集成到数据(存储在VCS中的文件)中通常不是一个很好的主意(请参见本问题中的辩论): Embedded Version Numbers - Good or Evil? “”

    我们的方法是用这种信息构建一个“发行说明”。然后,这个简单的文本文件存储在构建dll旁边。

        2
  •  1
  •   GregC Benjamin Baumann    15 年前

    我在Subversion和CC.NET持续集成服务器方面有积极的经验。

    您将设置一个nant目标,它获取最新的(它可以在这里锁定存储库),然后构建。构建完成后,它在SVN中生成一个版本标记。

    在构建时,可以很容易地从标记的版本推断文件的版本。

        3
  •  0
  •   Marc Gravell    15 年前

    对于我的“社区”工作,我使用一个简单的方案;在 [AssemblyVersion] / [AssemblyFileVersion] 程序集的属性。在运行时和通过资源管理器都可以很容易地查询到它们,更新它们的脚本也很容易——前几个任务 in here .