C#实现动态加载dll的方法
本文实例讲述了C#实现动态加载dll的方法。分享给大家供大家参考。具体实现方法如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Reflection; usingSystem.IO;
namespaceAlif.CommonAPI.DynamicLoadAssembly { publicclassAssemblyDynamicLoader<T> { privateAppDomainappDomain;
privateDynamicRemoteLoadAssembly<T>remoteLoader;
publicTInvokeMethod(stringassemblyName,stringassemblyPath,stringassemblyConfigFilePath,stringfullClassName,stringmethodName,paramsobject[]args) { AppDomainSetupsetup=newAppDomainSetup(); setup.ApplicationName="ApplicationLoader"; setup.ApplicationBase=AppDomain.CurrentDomain.BaseDirectory+@"bin\"; //setup.PrivateBinPath=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"private"); setup.CachePath=setup.ApplicationBase; setup.ShadowCopyFiles="true"; if(assemblyConfigFilePath!=string.Empty) { setup.ConfigurationFile=AppDomain.CurrentDomain.BaseDirectory+assemblyConfigFilePath; } setup.ShadowCopyDirectories=setup.ApplicationBase; setup.LoaderOptimization=LoaderOptimization.SingleDomain;
this.appDomain=AppDomain.CreateDomain("ApplicationLoaderDomain",null,setup); Stringname=Assembly.GetExecutingAssembly().GetName().FullName;
this.remoteLoader=(DynamicRemoteLoadAssembly<T>)this.appDomain.CreateInstanceAndUnwrap(name,typeof(DynamicRemoteLoadAssembly<T>).FullName);
assemblyName=AppDomain.CurrentDomain.BaseDirectory+assemblyPath+assemblyName;
returnthis.remoteLoader.InvokeMethod(assemblyName,fullClassName,methodName,args); }
///<summary> /// ///</summary> publicvoidUnload() { try { AppDomain.Unload(this.appDomain); this.appDomain=null; } catch(CannotUnloadAppDomainExceptionex) {
} } } }