using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Reflection;
namespace UnloadDll
{
class Program
{
static void Main(string[] args)
{
string callingDomainName = AppDomain.CurrentDomain.FriendlyName;//Thread.GetDomain().FriendlyName;
Console.WriteLine(callingDomainName);
AppDomain ad = AppDomain.CreateDomain("DLL Unload test");
ProxyObject obj = (ProxyObject)ad.CreateInstanceFromAndUnwrap(@"UnloadDll.exe", "UnloadDll.ProxyObject");
obj.LoadAssembly();
obj.Invoke("TestDll.Class1", "Test", "It's a test");
AppDomain.Unload(ad);
obj = null;
Console.ReadLine();
}
}
class ProxyObject : MarshalByRefObject
{
Assembly assembly = null;
public void LoadAssembly()
{
assembly = Assembly.LoadFile(@"TestDLL.dll");
}
public bool Invoke(string fullClassName, string methodName, params Object[] args
C#动态卸载DLL
最新推荐文章于 2024-07-15 15:15:38 发布
本文展示了如何在C#中使用AppDomain动态加载和卸载DLL。通过创建新的AppDomain,加载DLL,调用DLL中的方法,然后卸载AppDomain来实现DLL的卸载。关键点包括继承MarshalByRefObject类以便于跨AppDomain操作以及使用Assembly类加载和调用DLL方法。
摘要由CSDN通过智能技术生成