将DLL加载到单独的AppDomain中可以实现在.NET应用程序中动态加载和卸载DLL,而不会影响到其他模块的运行。这种方法可以用于插件化开发、模块化开发等场景。
以下是一个简单的示例代码:
using System;
using System.Reflection;
public class Program
{
static void Main(string[] args)
{
AppDomain domain = AppDomain.CreateDomain("MyDomain");
domain.AssemblyResolve += Domain_AssemblyResolve;
domain.DoCallBack(LoadAssembly);
AppDomain.Unload(domain);
}
private static void LoadAssembly()
{
string assemblyPath = @"C:\MyAssembly.dll";
Assembly assembly = Assembly.LoadFrom(assemblyPath);
Type type = assembly.GetType("MyNamespace.MyClass");
object obj = Activator.CreateInstance(type);
type.GetMethod("MyMethod").Invoke(obj, null);
}
private static Assembly Domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string assemblyPath = @"C:\MyAssembly.dll";
return Assembly.LoadFrom(assemblyPath);
}
}
在上面的示例代码中,我们首先创建了一个新的AppDomain,并为其指定了一个名称。然后,我们通过监听AssemblyResolve事件来加载所需的DLL。在LoadAssembly方法中,我们加载了DLL并实例化了一个类,然后调用了该类的方法。最后,我们卸载了AppDomain。
需要注意的是,由于每个AppDomain都有自己的程序集加载上下文,因此在加载DLL时需要注意避免重复加载同一个程序集。此外,由于每个AppDomain都是独立的,因此在加载DLL时需要注意线程安全和资源管理。
领取专属 10元无门槛券
手把手带您无忧上云