1

我想要一个工具或技术能够回答“什么版本的文件 X 用于构建 Assembly abc.dll?”这个问题。我最近搬到了一个 .NET 开发小组,似乎这个问题一直以一种或另一种形式出现,我们还没有完全掌握它。有人会说“嘿,你的最新代码在测试服务器上吗?” 答案不可避免地是“我不知道”。

回到过去的 Unix 开发时代(我在这里约会自己),SCCS 源代码控制系统有特殊的关键字,例如 %I%(版本)和 %M%(模块名称),您可以将它们放在文件中,即只要文件被签出,就会被适当的 SCCS 版本信息替换。因此,您可以做的一个巧妙的技巧是在源文件中为“%I% %M%”分配一个常量字符串,编译,然后在生成的库上运行Unix“strings”命令以确定使用了哪些文件的版本构建该文件。

我做了一个快速测试,在 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 为中心的解决方案,用于跟踪哪个文件的哪个版本进入了哪个程序集?

4

3 回答 3

1

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

您已经设置了一个 NAnt 目标来获取最新的(它可以在此处锁定存储库),然后构建。构建完成后,它会在 SVN 中创建一个版本标签。

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

于 2009-06-03T04:00:05.000 回答
1

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

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

于 2009-06-03T04:07:43.860 回答
0

对于我的“社区”工作,我使用了一个简单的方案;我使用 SVN 修订号作为程序集的[AssemblyVersion]/[AssemblyFileVersion]属性中的构建版本。在运行时和通过资源管理器查询这些都非常容易,更新它们的脚本也很容易——这里的前几个任务。

于 2009-06-02T21:34:13.140 回答