【问题标题】:Problems in versioning with .Net.Net 版本控制中的问题
【发布时间】:2014-09-16 15:12:30
【问题描述】:

我们的项目有一个程序集(我们称之为 IC),它应该用于许多其他项目(我们称之为 Instruments)。我们的项目也使用 Instruments,它使用反射来获取它们,因为它们是单独安装的(它们作为插件工作)。

我们要求对 IC 组件进行签名。

在这种情况下如何处理 IC 的版本控制?如果我们更新 IC,我们不想更新/重建每个仪器,因此我们应该支持向后兼容。即使我们更新了项目或 IC,这些仪器通常也会在客户机器上停留很长时间。

如果我们每次修改 IC 都更改版本 - 因为 IC 已签名,因此需要旧 IC 版本的仪器将无法访问它。如果我们不这样做 - 我们会遇到“最后安装的是什么,我们的项目还是仪器?”的问题。如果 Instrument 是最后一个安装的,并且它有一个旧的 IC,我们就完蛋了。 此外,我们希望以某种方式确保项目可以作为一个整体运行,迭代所有项目部分、检查所需的最大 IC 版本并通过反射检查 IC 本身的版本是好的吗?

【问题讨论】:

    标签: .net versioning


    【解决方案1】:

    您的“IC”程序集需要被您的应用程序视为不可变版本化程序集,使用Assembly Versioning in Extensible Applications文档中的术语。它们之间的主要区别是不可变程序集从不,而版本化程序集使用程序集绑定重定向来支持完全向后兼容的更改。

    您需要遵循的指南包括但不限于:

    1. 确保仅包含最少的接口集,以提供与其交互的程序集所使用的合同,从而最大限度地减少您需要对“IC”进行更改的次数。

    2. 确保永远不要对“IC”组件引入向后不兼容的更改。如果您发现需要进行向后不兼容的更改(例如向现有接口添加方法,或向现有方法添加参数),请停下来寻找新的方法。例如,您可以定义一个包含MoreStuff 方法的新接口IMyInterface2,而不是将方法MoreStuff 添加到IMyInterface。只需确保您的应用程序仍然可以处理实现 IMyInterface 但不实现 IMyInterface2 的对象。

    【讨论】:

    • 绑定重定向是否允许我在更改他们使用的 IC 版本时不重建仪器? (IC 已签名)。我的第一印象是我仍然需要重建它们
    • Archeg:这是正确的,前提是新版本的 IC 与旧版本二进制向后兼容,这次使用的是本重大变更政策文档中的术语。 github.com/rackerlabs/dotnet-uritemplate/blob/master/…
    • 谢谢!很多新信息可以尝试和思考
    猜你喜欢
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多