【发布时间】:2009-06-02 21:27:08
【问题描述】:
我想要一个工具或技术能够回答“什么版本的文件 X 用于构建 Assembly 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 为中心的解决方案,用于跟踪哪个文件的哪个版本进入哪个程序集?
【问题讨论】:
标签: .net version-control assemblies versioning clearcase