首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将DLL加载到单独的AppDomain中

将DLL加载到单独的AppDomain中可以实现在.NET应用程序中动态加载和卸载DLL,而不会影响到其他模块的运行。这种方法可以用于插件化开发、模块化开发等场景。

以下是一个简单的示例代码:

代码语言:csharp
复制
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时需要注意线程安全和资源管理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券