我正在寻找有关命名程序集和对其进行版本控制的一些好方法。你多久增加一次主要版本或次要版本?
在某些情况下,我看到版本从1.0版本直接发布到3.0版本。在其他情况下,它似乎停留在版本1.0.2.xxxx。
这将用于整个公司的多个项目中使用的共享程序集。期待一些好的投入。
答案 0 :(得分:24)
来自this article的关于Suzanne Cook在MSDN上的博客的一些好消息(2003-05-30发布):
何时更改文件/程序集版本
首先,文件版本和汇编版本不需要重合 彼此。我建议文件版本随每个版本而变化 建立。但是,不要为每个构建更改程序集版本 你可以分辨出两个版本的相同之处 文件;使用文件版本。决定何时更改装配 版本需要讨论要考虑的构建类型: 运费和非运费。
非装运构建
一般情况下,我建议在装运构建之间保持非装运装配版本相同。这个 避免由于版本而强烈命名的程序集加载问题 不匹配。有些人更喜欢使用发布商政策来重定向新内容 每个构建的程序集版本。我建议不要这样做 但是,非运输版本:它不会避免所有加载 问题。例如,如果合作伙伴对您的应用进行x复制,则可能不会 知道安装发布者政策。然后,您的应用将被打破 它们,即使它在你的机器上工作得很好。但是,如果有不同的应用程序相同的情况 机器需要绑定到你的程序集的不同版本,我 建议给那些构建不同的汇编版本,以便 每个应用程序的正确一个可以使用而无需使用 LoadFrom /等
运输构建
至于是否最好为运输版本更改该版本,这取决于您希望绑定的方式 为最终用户工作。你想要这些构建是并排的还是 到位?这两个版本之间有很多变化吗?是吗 要打破一些客户?你是否在乎它打破了他们(或者做到了 你想强迫用户使用你的重要更新)?如果是的话,你 应该考虑增加程序集版本。但话又说回来, 考虑到这样做太多次可能会乱丢用户的磁盘 与过时的组件。更改装配版本时
要将硬编码版本更改为新版本,建议您为版本设置变量 在头文件中并用。替换源中的硬编码 变量。然后,在构建期间运行预处理器以放入 正确的版本。我建议您在发货后立即更换版本, 不是以前,所以有更多的时间来捕捉错误 变化
答案 1 :(得分:21)
定义版本控制的一种方法是为每个部分赋予语义含义:
以上仅是一个示例 - 您需要定义对您有意义的规则。但是,用户通过查看版本快速判断是否存在不兼容性是非常好的。
哦,不要忘记发布你提出的规则,以便人们知道会发生什么。
答案 2 :(得分:8)
语义版本控制有一套关于如何应用此(以及何时)的指南和规则。非常简单,它只是有效。
答案 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