汇编命名和版本控制的最佳实践?

时间:2008-10-14 02:28:56

标签: c# .net assemblies versioning

我正在寻找有关命名程序集和对其进行版本控制的一些好方法。你多久增加一次主要版本或次要版本?

在某些情况下,我看到版本从1.0版本直接发布到3.0版本。在其他情况下,它似乎停留在版本1.0.2.xxxx。

这将用于整个公司的多个项目中使用的共享程序集。期待一些好的投入。

4 个答案:

答案 0 :(得分:24)

来自this article的关于Suzanne Cook在MSDN上的博客的一些好消息(2003-05-30发布):

  

何时更改文件/程序集版本

     

首先,文件版本和汇编版本不需要重合   彼此。我建议文件版本随每个版本而变化   建立。但是,不要为每个构建更改程序集版本   你可以分辨出两个版本的相同之处   文件;使用文件版本。决定何时更改装配   版本需要讨论要考虑的构建类型:   运费和非运费。

     

非装运构建
一般情况下,我建议在装运构建之间保持非装运装配版本相同。这个   避免由于版本而强烈命名的程序集加载问题   不匹配。有些人更喜欢使用发布商政策来重定向新内容   每个构建的程序集版本。我建议不要这样做   但是,非运输版本:它不会避免所有加载   问题。例如,如果合作伙伴对您的应用进行x复制,则可能不会   知道安装发布者政策。然后,您的应用将被打破   它们,即使它在你的机器上工作得很好。

     

但是,如果有不同的应用程序相同的情况   机器需要绑定到你的程序集的不同版本,我   建议给那些构建不同的汇编版本,以便   每个应用程序的正确一个可以使用而无需使用   LoadFrom /等

     

运输构建
至于是否最好为运输版本更改该版本,这取决于您希望绑定的方式   为最终用户工作。你想要这些构建是并排的还是   到位?这两个版本之间有很多变化吗?是吗   要打破一些客户?你是否在乎它打破了他们(或者做到了   你想强迫用户使用你的重要更新)?如果是的话,你   应该考虑增加程序集版本。但话又说回来,   考虑到这样做太多次可能会乱丢用户的磁盘   与过时的组件。

     

更改装配版本时
要将硬编码版本更改为新版本,建议您为版本设置变量   在头文件中并用。替换源中的硬编码   变量。然后,在构建期间运行预处理器以放入   正确的版本。我建议您在发货后立即更换版本,   不是以前,所以有更多的时间来捕捉错误   变化

答案 1 :(得分:21)

定义版本控制的一种方法是为每个部分赋予语义含义:

  • 当兼容性与新版本相关时,从N.x转到N + 1.0
  • 添加新功能但不破坏兼容性时,从N.M转到N.M + 1
  • 添加错误修复后,从N.M.X转到N.M.X + 1

以上仅是一个示例 - 您需要定义对您有意义的规则。但是,用户通过查看版本快速判断是否存在不兼容性是非常好的。

哦,不要忘记发布你提出的规则,以便人们知道会发生什么。

答案 2 :(得分:8)

语义版本控制有一套关于如何应用此(以及何时)的指南和规则。非常简单,它只是有效。

http://semver.org/

答案 3 :(得分:6)

我建议的第一件事是熟悉程序集版本和文件版本之间的差异。不幸的是,当涉及到AssemblyInfo文件时,.NET倾向于将它们视为相同,因为它通常只放置AssemblyVersion并允许FileVersion默认为相同的值。

既然你说这是一个共享程序集,我假设你的意思是它在二进制级别共享(而不是将项目包含在各种解决方案中)。如果是这种情况,您希望非常谨慎地更改程序集版本,因为这是.NET用来强制命名程序集(允许您将其置于GAC中)并且还构成“程序集全名”。当程序集版本发生更改时,它可以对使用它的应用程序进行重大更改,而无需在app.config文件中添加程序集重定向条目。

至于命名,我认为这取决于您公司的命名规则(如果有的话)和库的目的。例如,如果此库提供的“核心”(或系统级)功能并非特定于任何特定产品或业务线,则可将其命名为:

CompanyName.Framework.Core 

如果它是更大的库的一部分,或者只是

CompanyName.Shared
CompanyName.Core
CompanyName.Framework

至于何时增加版本号,它仍然是相当主观的,取决于你认为构建号的每个部分代表什么。默认的Microsoft方案是Major.Minor.Build.Revision,但这并不意味着您无法提出自己的定义。最重要的是保持策略的一致性,并确保定义和规则对所有产品都有意义。

在几乎所有的版本方案中,我都看到前两部分是Major.Minor。主要版本号通常在有大的更改和/或中断更改时递增,而次要版本号通常递增以指示更改的内容不是一个重大更改。其他两个数字更加主观,可以是“构建”(通常是连续日期值或每天更改的顺序更新数字)和“修订版”或补丁号。我也看到它们颠倒了(给Major.Minor.Revision.Build),其中build是自动构建系统中的顺序递增数字。

请记住,在导出程序集时,程序集主要版本和次要版本将用作类型库版本号。

最后,请查看其中一些资源以获取更多信息:

http://msdn.microsoft.com/en-us/library/51ket42z.aspx

http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

http://blogs.msdn.com/suzcook/archive/2003/05/29/57148.aspx