如何在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插件框架的解决方法,针对这个问题,各位看官有其它办法来解决吗?

如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持[转载]的更多相关文章

  1. Mac系统cocos2dx + android 开发环境配置

    Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:htt ...

  2. 如何在ASP.NET Core中实现CORS跨域

    注:下载本文的完整代码示例请访问 > How to enable CORS(Cross-origin resource sharing) in ASP.NET Core 如何在ASP.NET C ...

  3. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  4. [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置

    [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置 原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET COR ...

  5. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  6. 如何在ASP.Net创建各种3D图表

    我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...

  7. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  8. 如何在ASP.NET Core中实现一个基础的身份认证

    注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ...

  9. 如何在ASP.NET Core中应用Entity Framework

    注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity ...

随机推荐

  1. easyui datagrid 单元格编辑 自动聚焦 、全选

    $.extend($.fn.datagrid.methods, { editCell: function (jq, param) { return jq.each(function () { var ...

  2. C语言库函数大全及应用实例十二

    原文:C语言库函数大全及应用实例十二                                          [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette ...

  3. CSS代码实现图片防盗链

    CSS代码实现图片防盗链的方法其实很简单.在CSS文件中添加以下代码: img { filter:exPRession( this.不能去掉 ? "" : ( (!this.com ...

  4. JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内

    /* *JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内 *@param date1 date2(形如:'2015-01-01'类 ...

  5. php——SoapClient访问webservice

    原文:php--SoapClient访问webservice 通过SoapClient调用天气预报 <?phpheader ( "Content-Type: text/html; ch ...

  6. lua迭代器和仿制药for

    不管是什么样的结构,你只需要同意遍历集合可以称为迭代器的所有元素.lua常用来形容叙事功能迭代器.个元素.每个迭代器都须要保存一些状态来知道当前处于什么位置和怎样进行下一次迭代. 对于这种任务.闭包提 ...

  7. jmeter java请求

    demo下载地址http://yun.baidu.com/share/link?shareid=4277735898&uk=925574576 1.引用jmeter的jar包 到jmeter的 ...

  8. WebApi 插件式构建方案

    WebApi 插件式构建方案 WebApi 插件式构建方案 公司要推行服务化,不可能都整合在一个解决方案内,因而想到了插件式的构建方案.最终定型选择基于 WebApi 构建服务化,之所以不使用 WCF ...

  9. Ora创建job定时执行某存储过程

    --创建job任务,每天晚上8点执行存储过程:por_postrecords-- declare job number; begin sys.dbms_job.submit(job =>job, ...

  10. Visual Studio 2015 & C#6.0 试用报告,持续更新。

    昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不提,C#常年被人指责跨平台性不佳,我也是无能为力.即使有Mono等第三方跨平台工程,.NET ...