[已关闭问题] [请教]关于 .NET 应用的几个问题请教!!!
提问时间: 2008-03-27 10:40
悬赏分:100 提问时间2008/3/27 10:40:02 问题为何被关闭 浏览:482 次
1——
在.NET应用中,假如一个DLL想给多个应用程序共享,常规方案是注册到GAC,但这个方案很麻烦,需要注册,容易产生垃圾。
(比如在 ASP.NET 中,如果更新注册到GAC中的DLL非常不方便,特别是大型网站使用负载均衡时代码同步)。

问题:

能否不注册到 GAC 也能让多个应用共享DLL?比如:某些项目可以把 DLL 放置到 PROGRAM FILES 文件夹的 COMMON 中来实现。

2——
同问题1,在ASP.NET应用中,多个WEB站点使用了很多相同的DLL模块,能否让这些站点从相同的文件夹中获取?(不使用GAC方案)。

3——
在 .NET 应用中,某个类具备一个 VIRTUAL 或 ABSTRACT 的方法或属性,其好处显而易见。

问题:
如何让派生的子类不能重载原本可以重载的方法或属性。
(4)
不使用GAC好象比较困难. 放在一个地方理论上好象是可行的. Assembly.Load方法可以指定路径. 但是使用起来还是不方便吧.... 3. 这个应该是有确定性的吧,如果需要被覆写才作标记,如果不需要覆写那就不要标.
6个月前   回答者:沙加 - 老鸟四级
1,我更推荐每个程序都复制一份自己的私有程序集.这样部署起来更简单,单独升级也更容易.这也正是.Net的一个目标:XCopy部署. 如果一定要共享,我觉得还是放到GAC比较合适,因为GAC不仅仅是一个文件夹,它还有版本管理的功能,能在很大程度上避免dll hell. 2,可以,通过反射(Assembly.Load***),动态加载程序集. 不过这样一来就失去了"程序集一旦被修改,就自动重启AppDomain"的好处,可能还有很多其它方面需要注意和处理. 3,添加一个中间类,里面用new关键字重新定义一个与父类相同签名和访问公开性的非虚拟方法. 其实,这样的需求,倒不如不用继承,而是把父类拆分为几个接口,然后用Extension methods分别给不同的接口添加不同的方法.博客园前一段有人讨论过这种设计方法.
6个月前   回答者:deerchao - 大侠五级
1—— 在.NET应用中,假如一个DLL想给多个应用程序共享,常规方案是注册到GAC,但这个方案很麻烦,需要注册,容易产生垃圾。 这个好解决: 1.在环境变量中设置DEVPATH到任意目录 2.在config中加入 <configuration> <runtime> <developmentMode developerInstallation="true" /> </runtime> </configuration> 3.把dll拷贝到DEVPATH设置的目录中 问题2同1的解决方式一样 至于问题3,何必呢 :) 补充ls的回答 LoadFrom方法不需要指定程序集的版本号以及PublicToken,所以如果只有一个dll,还是比较方便的,Assembly.Load方法则需要指定版本号还有PublicToken,对于经常更新的dll,则需要经常更新这个方法的参数了,不过可以写在配置文件中啊,方便
6个月前   回答者:micYng - 菜鸟二级
对于问题一和二,其实都没必要,增加开发成本,同时这也是一种耦合的加强而已。 问题三 如果子类和父类不在一个dll中,比如 子类 class child 在child dll中,父类 class father 在 father.dll 那么只需要把father 里面的 virtual 方法定义个一个只有father.dll可见的类型。abstract方法则是必须实现的,否则编译都通不过的。 如果在同一个dll中,做这件事情是没有意义的,如果一个类不能继承,其他类都不能继承,那还virtual 什么?为了降低性能?
6个月前   回答者:BirdsHover - 菜鸟二级
6个月前   笨笨蜗牛 :
谢谢各位的解答。

对各位的解答我做以下解释:

1——
这个问题,如果是桌面应用问题不大,可以接受。

2——
这个问题同问题 1,但这里是强调了WEB应用,是自己的服务器,服务器上配置了若干完全独立的站点,各站点都使用公共的基础类库(自己开发的),由于考虑代码的一致性问题,如果采用XCOPY的方式发布,容易不一致,所以有了这个想法。

对这个问题,如果使用GAC,基于WEB应用的特点,肯定不现实,毕竟自己开发的基础模块也是在不断完善中的,每次发布新版本都必须系统管理员参与,可行性可想而知。

似乎 3 楼 MICYNG 的解决方案可行,测试下先。

3——
这个问题牵涉到的是 基于 MS 发布的类库。主要是:page 类的 render 方法。

我想控制基于自己开发的继承自 System.Web.Page 的类的 可重载方法 Render 在这个类的 派生子类 中 不允许 重载:或者抛出异常,或者只能是new的方式。
5个月前   笨笨蜗牛 :
在我之前的应用中使用以下配置:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin"/>
</assemblyBinding>
</runtime>
解决了模块放置在不同文件夹的问题,但是

1——
这个privatepath必须是应用的下级子目录,不能是其它完整的应用路径,即便使用“../”父路径都不可以。

2——
通过linkd命令方式连接的逻辑文件夹,也不认,好象必须是纯粹的物理文件夹

此外,micYng提供的使用DEVPATH的方法实验了,失败,不知道是否我做错了。

   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关内容

相关链接