繁体   English   中英

为什么.NET中的System.Version定义为Major.Minor.Build.Revision?

[英]Why is System.Version in .NET defined as Major.Minor.Build.Revision?

为什么.NET中的System.Version定义为Major.Minor.Build.Revision? 几乎每个人(包括我)似乎都同意修改属于第三位,而“构建”或任何你想称之为属于最后的版本。

微软是否以这种随意的方式使用这些数字,例如3.5.3858.2,或者这些名称本身只是倒退? 例如,如果您使用订单Major.Minor.Build.Revision编写自己的Version类,在转换为System.Version时交换最后两个组件是否合适,或者忽略它并只是假装名称倒退了吗?

我认为最混淆的是大多数人认为是“修订版”以及微软所做的事情

  • 构建:构建号的差异表示对同一源的重新编译。 由于处理器,平台或编译器的更改,这是合适的。

  • 版本:具有相同名称,主要版本号和次要版本号但不同版本的程序集应完全可互换。 这适用于修复先前发布的组件中的安全漏洞。

对于他们而言,安全修复角度可能更为常见,似乎是将其置于最后位置的一个正当理由,作为“最轻微”的变化。

我意识到我来晚会的时间有点晚了,但我想分享一下为什么构建和修改的顺序“错误”。 并不是说他们的顺序错误 ,而是他们没有任何顺序。

当它归结为它时,程序集的版本是Major.Minor。 微软表示,从前面提到的链接 “只有构建版本或版本号不同的程序集的后续版本被认为是以前版本的修补程序更新。” [我的重点]

Build表示对同一源的重新编译。 版本代表一个代码更改,但可以与同一[Major.Minor]版本的其他修订完全互换。 但两者都不优先于另一个。

因此,总而言之,不要将其视为:

+ Major
|
+-+ Minor
  |
  +-+ Build
    |
    +-+ Revision

但反而:

+ Major
|
+-+ Minor
  |
  +-+ Build
  |
  +-+ Revision

微软是否以这种随意的方式使用这些数字,例如3.5.3858.2

如果你让它默认,例如通过指定[assembly: AssemblyVersion("1.1.*")] ,那么第三个数字每天递增,第四个数字是自午夜以来的秒数除以2(消除歧义,如果有的话)一天内不止一次构建)。

几乎每个人(包括我)似乎都同意修改属于第三位,而“构建”或任何你想称之为属于最后的版本。

微软似乎正在使用“构建”作为“日”的同义词:也许这与“每日构建”的概念有关; 因此,“修订版”是(每日)构建的另一个版本。

迟到的答案,但我觉得其他答案可以稍微扩展一下。

术语“构建”和“修订”只是Microsoft术语。 System.Version类并不关心如何分配它们。

至于切换部件的顺序以匹配您自己的术语,我会说你基本上应该完全忽略这些单词,而是考虑System.Version 真正定义的内容:

  • 它可以解析并生成的字符串格式:

     major.minor[.build[.revision]] 

    这意味着如果您习惯拥有格式为xyzw的版本,那么您应该以这种方式实例化Version类:

     new Version(x, y, z, w) 

    任何其他参数顺序都不会与Parse()和ToString()相匹配。 如果你切换z和w,那么ToString()会输出xywz,如果你期望xyzw,这会让每个人都感到困惑

  • 版本比较和排序顺序 ,其中版本首先按主要排序,然后按次要排序,然后按版本排序,然后按照我们大多数人的预期进行修订。 也就是说,1.2.5晚于1.2.3.7。

    因此,如果您将版本字符串设置为1.2.6.4并希望将其视为比1.2.5.8更新,则不要在Version构造函数中切换部件的顺序。

简而言之 - 虽然主要/次要/构建/修订这两个词可能会给出一个关于在考虑到变化量时应该增加哪个数字的线索,但术语对于如何实际使用该类几乎没有影响。 格式化和排序是重要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM