我们的项目有一个程序集(我们称之为IC),应该用于许多其他项目(我们称之为仪器)。我们的项目也使用Instruments,它使用反射来获取它们,因为它们是单独安装的(它们用作插件)。
我们要求签署IC组装。
在这种情况下,如何处理IC的版本控制?如果我们更新IC,我们不想更新/重建每个仪器,因此我们应该支持向后兼容性。即使我们更新项目或IC,这些仪器通常会长时间停留在客户机器上。
如果我们更改每个IC修改的版本 - 因为IC已签名,那么需要旧IC版本的仪器将无法访问它。如果我们不这样做 - 我们遇到的问题是“最后安装的是什么,我们的项目还是仪器?”如果仪器安装在最后一台并且它有一个旧的IC,我们就搞砸了。 另外我们想确保项目可以整体运行,是否迭代所有项目部件,检查所需的最大IC版本以及通过反射检查IC本身的版本是否合适?
答案 0 :(得分:0)
您的“IC”程序集需要被应用程序视为 immutable 或 versioned 程序集,并使用Assembly Versioning in Extensible Applications文档中的术语。它们之间的主要区别是不可变组件从不,而版本化组件使用组装绑定重定向来支持专门向后兼容的更改。
您需要遵循的准则包括但不限于:
通过确保仅包含提供与其交互的程序集所使用的合同所需的最小接口集,最大限度地减少需要对“IC”进行更改的次数。
确保永远不会向“IC”程序集引入向后不兼容的更改。如果您发现需要进行向后兼容的更改(例如向现有界面添加方法或向现有方法添加参数),停止并找到新方法。例如,您可以定义包含MoreStuff
方法的新接口IMyInterface
,而不是将方法IMyInterface2
添加到MoreStuff
。只需确保您的应用程序仍然可以处理实现IMyInterface
但不实现IMyInterface2
的对象。