日期:2014-05-17  浏览次数:21095 次

C# Winfrom 动态加载程序集
题:
  主系统
  子系统1、子系统2、子系统3、子系统4
  公共类库1、公共类库2【公共系统仅供所有子系统调用】

主系统通过反射调用子系统:
 要求:能加载子系统程序集,能卸载子系统程序集


谁帮忙解决100分相送,若嫌不够另外加分。



------解决方案--------------------
建议楼主好好研究一下Assembly
------解决方案--------------------
用System.Reflection.Assembly.Load 动态加载程序集(.exe或dll)
如:Assembly a = Assembly.LoadFrom("dy_loadAsse.exe");

用AppDomain.Unload 方法 卸载指定的应用程序域中的所有程序集。


参考:
1..NET 动态加载程序集(一)
2..NET 动态加栽程序集(二)
3..NET 动态加载程序集(三)
------解决方案--------------------
探讨
说下用什么方法可以实现既能加载程序集,又能卸载程序集的办法,有代码更好。。。
注意:所有子系统调用的所有公共类库了。另外考虑下命名空间冲突问题。

------解决方案--------------------
Assembly a = Assembly.LoadFrom(DLL路径);
------解决方案--------------------
动态加载程序集有什么难的?难的在你系统的解耦,只有你的系统很好的解耦了,动态加载程序集才有威力;
------解决方案--------------------
探讨
所有子系统调用的所有公共类库了。另外考虑下命名空间冲突问题。

------解决方案--------------------
C# code
没啊神,竟然有人知道?

------解决方案--------------------
实现插件结构
Form1 fm=(Form)Assembly.Load("").CreateInstance(""); 
fm.MdiParent=this.ParentForm; 
fm.Show(); 
fm.Dock=DockStyle.Fill; 

------解决方案--------------------
探讨
用System.Reflection.Assembly.Load 动态加载程序集(.exe或dll)
如:Assembly a = Assembly.LoadFrom("dy_loadAsse.exe");

用AppDomain.Unload 方法 卸载指定的应用程序域中的所有程序集。


参考:
1..NET 动态加载程序集(一)
2..NET 动态加栽程序集(二)
3..NET 动态加载程序集(三)

------解决方案--------------------
我 也 很 想 知 道 这 个 怎 么 做
------解决方案--------------------
子系统DLL.AssemblyInfo.cs 中加入自定义属性 A。
利用反射加载运行目录下所有DLL。判断这些DLL是否含有自定义属性 A,有则加载到程序集。
在窗体加载的时候,对符合条件的DLL进行操作,比如用反射实例化,此类操作应用接口操作起来会比较简单。

------解决方案--------------------
[color=red]mark[/color]