你已经触及了一个非常大的话题,这确实可以得到复杂,因为你将允许它。
最终,您选择的版本控制方法将取决于您需要实现的内容以及您需要分配多少时间来维护它。这两者直接相关。
版本控制的两个主要目标是并行执行和跟踪。并行(SxS)允许同一个DLL的多个版本在相同的应用程序中执行。如果不改变汇编版本号,这是不可能的。 跟踪只是能够确定客户机器上运行的确切代码快照。 两者都可以通过改变汇编版本来实现,但是第一个可以通过改变汇编版本来实现只有。
许多人会推荐您在所有DLL/EXE中共享版本号 - 这是一个很好的方法,因为它是最简单的方法,它也实现了最小的部署灵活性。例如,如果您使用任何形式的合同抽象(通过接口而不是具体类型定义DLL之间的依赖关系),则可以将应用程序划分为多个“版本控制筒仓”。 一个例子是客户端和服务器,在第三个程序集中定义的相互依存关系,您的WCF合同。 如果它们都是单独版本,那么你可以释放一个新版本的服务器(只要它符合同一个合同),而不影响客户端。反之亦然。正如你所看到的,随着需求的增长,你将增加你的版本粒度,但它会遭到偷听。
您可以做的最好的事情就是您正在做的事,坐下来计划您的需求,然后绘制出您的版本边界(哪些组件可以通过合同分开)。
接下来的事情取决于测试部门的大小,但我也建议您考虑让文件版本反映(至少部分)内部版本号/日期。 对于每个客户发布版本,您只会增加一次程序集版本,但对于每个来自版本的DLL集合,您应该拥有不同的文件版本。这是因为当你测试时,并且你找到一个问题时,让这些DLL唯一标识将消除对DLL源自哪个构建的任何怀疑。
这取决于DLL是否是应用程序的一个组成部分,或者依赖于它们自己的项目。我目前正在研究具有可用于其他项目的库DLL的应用程序。库DLL有它自己的汇编信息,我们不保证其版本号将与其使用的每个其他项目的版本号相匹配。 –
@罗伯特哈维,是的 - 当然。如果dll不是应用程序的组成部分,那么您不能使用共享的assemblyinfo。但在这个特定的问题,似乎该DLL是应用程序的一部分。 – Illuminati