[转载]高级别问题:如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持 – 道法自然 – 博客园.
这是我最近碰到的一个问题,有一家企业.NET程序员有80多人,产品线很多也很复杂。 对于这样的产品,他们采用了模块化开发来实现复用与协作。不过,这样做需要解决一个问题,就是在一个产品中,不同模块由不同Team来开发,他们可能会引 用同一个程序集的不同版本。这时候,你该怎么来解决呢?
我先亮出基于iOpenWorks插件框架(你可以访问http://www.iopenworks.com/Products/SDKDownload来下载这个插件框架)解决方法,然后描述这个问题的上下文,最后可由读者们来提提你们的解决方案。
在部门管理模块中,我们使用了一个程序集的1.0.0.1版本,分别在代码和ASP.NET页面中引用了该程序集,如下所示。传统在ASP.NET 页面中使用程序集的方法是:(1)使用Import标签来声明引用的类型空间,接着使用其类型;(2)使用指定命名空间的类型来调用。需要注意的是,为了 降低开发复杂度,模块使用多版本程序集的方法和以前的方法相同,从而避免模块化引起的侵入性负效应。在下图中,你可以发现支持多版本的模块化开发方法和原 有方式一模一样。
在用户管理模块中,我们使用了一个程序集的1.0.0.0版本,也分别在代码和ASP.NET页面中引用了该程序集,如下所示。
这两个模块由两个团队来分别开发,由于管理和进度原因,他们使用了同一个程序集的不同版本,此时,基于OSGi.NET的实现方案结果如下。在用户 管理里面,显示结果为1.0.0.0的结果,即打印出“ROOT”;在部门管理里面,显示结果为1.0.0.1的结果,即打印“ROOT- v1.0.0.1”。
iOpenWorks插件框架针对多版本程序集的支持方案的核心是实现正确的类加载,其实现核心为2点,如下所示:
(1)通过对CLR扩展,支持多版本程序集的类加载;
(2)扩展ASP.NET页面编译方法,为每一个ASP.NET页面编译设置正确的程序集版本。
这个示例的源码如下:点击下载源码。
除了iOpenWorks插件框架的解决方法,针对这个问题,各位看官有其它办法来解决吗?