.NET에서 DLL을 동적으로 로드하고 호출이 완료되면 즉시 해제합니다.

1372 단어
질문:
프로그램 집합을 반사동적으로 불러오기를 원할 때가 많습니다. 반사적으로 불러오는 방법을 호출하고, 호출이 끝난 후에 불러오는 DLL 파일을 제때에 풀어서 자원을 방출하고 dll를 업데이트할 수 있기를 바랍니다.
해결 방법:
현재 Assembly에 대해 CLR에서는 Assembly를 제거하는 방법을 제공하지 않습니다.Assembly는 Appdomain에 주재하고 Appdomain은 동적으로 마운트 해제하고 만들 수 있습니다.
예를 들어 동적 생성된 클래스 라이브러리가 있습니다.
4
public class HelloWorld : MarshalByRefObject
{
    public HelloWorld()
    {
        
    }

    public void Task1(string s)
    {
        Console.WriteLine("Task1 " + s);
    }
}
동적 호출
// File: Invoke.cs

using System;
using System.Reflection;
using System.Runtime.Remoting;

public class InvokeMethod
{
public static void Main( String[] argv )
{
    AppDomainSetup info = new AppDomainSetup();
    info.ApplicationBase = "file:///" + System.Environment.CurrentDirectory;
    AppDomain dom = AppDomain.CreateDomain("RemoteDomain", null, info);
    Assembly asm =Assembly.Load("HelloWorld2");
    Object obj=asm.CreateInstance("HelloWorld");
    MethodInfo minfo=asm.GetType("HelloWorld").GetMethod("Task1") ;
    minfo.Invoke(obj,new string []{"Task 1"});
    AppDomain.Unload(dom);
}
}

dll host


좋은 웹페이지 즐겨찾기