在运行时加载程序集
我的项目是一个应用程序,我们在其中加载各种程序集并对它们执行操作。
我们陷入了这样一种情况:我们需要添加对我们加载的程序集的引用(将由用户选择)。 所以我需要在运行时添加对DLL的引用。
我试过这个网站,但在这里他们只支持像System.Security等微软DLL。我想添加对用户创建的dll(类库)的引用。
您不能在运行时“添加引用” – 但您可以加载程序集 – Assembly.LoadFrom
/ Assembly.LoadFile
等。问题是除非使用AppDomain
否则无法卸载它们。 拥有Assembly
,可以使用assemblyInstance.GetType(fullyQualifiedTypeName)
通过reflection创建实例(然后可以将其转换为已知接口等)。
对于一个简单的例子:
// just a random dll I have locally... Assembly asm = Assembly.LoadFile(@"d:protobuf-net.dll"); Type type = asm.GetType("ProtoBuf.ProtoContractAttribute"); object instance = Activator.CreateInstance(type);
此时我可以将instance
转换为已知的基类型/接口,或者继续使用reflection来操作它。
如果程序集位于当前位置或GAC中的其他位置,请使用AppDomain.CurrentDomain.AssemblyResolve事件自行传递程序集。
如果在运行时加载程序集,它将在当前位置或GAC中查找其所有依赖项,并在找到时加载它们,否则出错。
Composite UI Application Block在三个方面促进了客户端应用程序的设计和实现:
对于WPF:看看Prism:模式和实践WPF和Silverlight站点的复合应用程序指南它执行您需要的程序集加载,并在内部实际使用Unity,因为它是IoC容器。
对于非WPF:看看智能客户端 – 复合UI应用程序块
或者:尝试任何IoC容器,如Castle Windsor ,autofac,unity等。
上述就是C#学习教程:在运行时加载程序集分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1023068.html