我们的媒体中心加载项作为单个DLL提供,它存在于GAC(mediabrowser.dll)中,我们允许用户通过引用我们的DLL并访问预定义的扩展点来为我们的加载项编写扩展。
在加载时,我们搜索插件目录,加载目录中的所有程序集,在程序集中搜索实现IPlugin的类型,并在插件的实例上执行initialiaztion例程。我知道这不是最强大的设计(例如:我们可能希望稍后查看appdomain隔离插件),但它现在可以正常工作。
目前看来,这似乎工作得很好,除了一个很大的警告。
当插件编写者编译插件时,插件引用了具有特定版本的mediabrowser.dll。稍后当我们修改我们的dll(修复bug或添加功能)时,所有针对mediabrowser.dll早期版本写入的插件都会中断。
我想到了这个问题的一些解决方案(请注意程序集在GAC中):
我缺少这个问题的其他解决方案吗?
更新我最终选择了选项4.
答案 0 :(得分:1)
我看到你已经选择了一个答案,但是如果你仍然对想法持开放态度还有另外一个选择(.NET框架使用的那个):不要在构建之间增加程序集版本(但是增加你的程序集)建造数量)。
这将允许您的程序集保留其相同的强名称,而不是破坏插件compat,并且仍允许您区分构建(使用程序集内部版本号)。
您可以在.NET 2.0到3.5中看到这一点。这些版本都使用程序集版本2.0.50727,但具有不同的构建版本。
只要你不破坏你的界面合约(你永远不应该这样做),这种方法是非常合理的。