1,我更推荐每个程序都复制一份自己的私有程序集.这样部署起来更简单,单独升级也更容易.这也正是.Net的一个目标:XCopy部署.
如果一定要共享,我觉得还是放到GAC比较合适,因为GAC不仅仅是一个文件夹,它还有版本管理的功能,能在很大程度上避免dll hell.
2,可以,通过反射(Assembly.Load***),动态加载程序集. 不过这样一来就失去了"程序集一旦被修改,就自动重启AppDomain"的好处,可能还有很多其它方面需要注意和处理.
3,添加一个中间类,里面用new关键字重新定义一个与父类相同签名和访问公开性的非虚拟方法.
其实,这样的需求,倒不如不用继承,而是把父类拆分为几个接口,然后用Extension methods分别给不同的接口添加不同的方法.博客园前一段有人讨论过这种设计方法.