![](/img/trans.png)
[英]Is it possible to run unit tests when loading dependent assemblies at run-time?
[英]Loading assemblies at run-time
我的项目是一个应用程序,我们在其中加载各种程序集并对它们执行操作。
我们陷入了这样一种情况:我们需要添加对我们加载的程序集的引用(将由用户选择)。 所以我需要在运行时添加对DLL的引用。
我试过这个网站,但在这里他们只支持像System.Security等微软DLL。我想添加对用户创建的dll(类库)的引用。
您不能在运行时“添加引用” - 但您可以加载程序集 - Assembly.LoadFrom
/ Assembly.LoadFile
等。问题是除非使用AppDomain
否则无法卸载它们。 拥有Assembly
,可以使用assemblyInstance.GetType(fullyQualifiedTypeName)
通过反射创建实例(然后可以将其转换为已知接口等)。
对于一个简单的例子:
// 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
转换为已知的基本类型/接口,或者继续使用反射来操作它。
如果程序集位于当前位置或GAC中的其他位置,请使用AppDomain.CurrentDomain.AssemblyResolve事件自行传递程序集。
如果在运行时加载程序集,它将在当前位置或GAC中查找其所有依赖项,并在找到时加载它们,否则出错。
Composite UI Application Block在三个方面促进了客户端应用程序的设计和实现:
对于WPF:看一下Prism:模式和实践WPF和Silverlight站点的复合应用程序指南它执行您需要的程序集加载,并且实际上在内部使用Unity,因为它是IoC容器。
对于非WPF:看看智能客户端 - 复合UI应用程序块
或者:尝试任何IoC容器,如Castle Windsor ,autofac,unity等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.