我想要一个工具或技术能够回答“什么版本的文件 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 为中心的解决方案,用于跟踪哪个文件的哪个版本进入了哪个程序集?