AppDomain.Unload不会删除dll上的锁定

时间:2011-06-20 17:42:00

标签: appdomain

使用以下代码创建新的AppDomain并将我的程序集加载到其中,我的程序集成功加载,但在我调用AppDomain.Unload方法后,仍然锁定已加载的dll,我去创建新的AppDomain解决方案因为我在网上发现这是加载/卸载程序集的推荐技术,也是为了使程序集可以替换,任何想法?

这是我的代码:

public sealed class AssemblyLoader : MarshalByRefObject
{
    private static AppDomain LocalDomain = AppDomain.CreateDomain("LocalDomain");

    public static Assembly LoadAssembly(string path)
    {
        try
        {
            Assembly assembly = Assembly.Load(AssemblyName.GetAssemblyName(path));
            if (assembly != null)
                return assembly;
        }
        catch { }

        return Assembly.LoadFrom(path);
    }

    public static void Unload()
    {
        if (LocalDomain != null)
        {
            AppDomain.Unload(LocalDomain);
            LocalDomain = null;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定,但理论上不应该更像这样。 您没有通过新创建的AppDomain加载程序集。

public static Assembly LoadAssembly(string path)
{
    try
    {
        Assembly assembly = LocalDomain.Load(AssemblyName.GetAssemblyName(path));
        if (assembly != null)
            return assembly;
    }
    catch { }

    // ..
}