簡體   English   中英

.net core 3. 卸載程序集

[英].net core 3. Unload assemblies

我不明白為什么在這種情況下上下文沒有卸載

class Program
{
    static void Main(string[] args)
    {
        CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
        Assembly assembly = context.LoadFromAssemblyPath(@"C:\Users\Greedy\source\repos\ConsoleApp1\MyApp\bin\Debug\netcoreapp3.1\MyApp.dll");
        context.Unload();
        
        GC.Collect();
        GC.WaitForPendingFinalizers();

        foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            Console.WriteLine(asm.GetName().Name);

        Console.Read();
    }

但是現在上下文上下文已成功卸載。

    class Program
{
    static void Main(string[] args)
    {
        CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
        Load(context);
        context.Unload();
        
        GC.Collect();
        GC.WaitForPendingFinalizers();

        foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
            Console.WriteLine(asm.GetName().Name);

        Console.Read();
    }

    static void Load(CustomAssemblyLoadContext context)
    {
        Assembly assembly = context.LoadFromAssemblyPath(@"C:\Users\Greedy\source\repos\ConsoleApp1\MyApp\bin\Debug\netcoreapp3.1\MyApp.dll");
    }

為什么? 以及如何在第一個示例中修復卸載?

在我看來,您的assembly變量持有對您加載的 DLL 的引用。

它在第二個示例中有效,因為您已將assembly聲明為方法的局部變量,因此當控制流離開方法時,該變量超出范圍。

還有其他注意事項。 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM