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

时间:2009-06-02 21:27:08

标签: .net version-control assemblies versioning clearcase

我想要一个工具或技术来回答“使用什么版本的文件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 个答案:

答案 0 :(得分:1)

我对SubVersion和CC.NET持续集成服务器有积极的经验。

你设置了一个抓住最新的NAnt目标(它可以在这里锁定存储库),然后构建。构建完成后,它会在SVN中生成一个版本标记。

在构建时,可以从标记的版本中轻松推断出文件的版本。

答案 1 :(得分:1)

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

我们的方法是使用这种信息构建“发行说明”。然后将这个简单的文本文件与build dll一起存储。

答案 2 :(得分:0)

对于我的“社区”工作,我使用一个简单的方案;我使用SVN修订版号作为针对程序集的[AssemblyVersion] / [AssemblyFileVersion]属性中的构建版本。在运行时和浏览器中查询这些内容非常容易,而且更新它们的脚本也非常简单 - 前几个任务in here