如何释放 Assembly 调用的dll文件
Form loadfm()
{
                        String pjname="pjh.dll";
Assembly   assm   =   Assembly.LoadFrom(pjname); 
Type   TypeToLoad=   assm.GetType("htcn.piaoju.money");       
object   obj;   
obj   =   Activator.CreateInstance(TypeToLoad);   
Form   fm  =   null;   fm   =   (Form)obj;   
return fm;
}如果释放Assembly?

解决方案 »

  1.   

    最好新建一个AppDomain,然后在那个AppDomain里加载Assembly。用完以后释放AppDomain。貌似Assembly不能单独释放,只能通过释放AppDomain来实现。
      

  2.   

    次序好似:LoadFrom-->CreateInstance-->GetType
      

  3.   


                //创建AppDomain
                AppDomain dom = AppDomain.CreateDomain("execDom");
                //加载Assembly
                dom.ExecuteAssembly(path);
                //使用后释放AppDomain
                AppDomain.Unload(dom);
      

  4.   

    问题解决:AppDomainSetup   ads   =   new   AppDomainSetup();   
    ads.ShadowCopyFiles   =   "true";   
    AppDomain.CurrentDomain.SetShadowCopyFiles();   
    Evidence adevidence   =   AppDomain.CurrentDomain.Evidence;   
    AppDomain   newDomain   =   AppDomain.CreateDomain("newDomain",   adevidence,   ads);   
    newDomain.SetShadowCopyFiles();   
        
    byte[]   rawAssembly   =   loadFile(pjname);   
    Assembly   assm   =   newDomain.Load(rawAssembly,   null);    
    object   obj   =   assm.CreateInstance("htcn.piaoju.money");      
    Form   fm  =   null;  
    fm   =   (Form)obj;   
    return fm;
      

  5.   

    private   byte[]   loadFile(string   filename)   
    {   
    FileStream   fs   =   new   FileStream(filename,   FileMode.Open);   
    byte[]   buffer   =   new   byte[(int)fs.Length];   
    fs.Read(buffer,   0,   buffer.Length);   
    fs.Close();   
    fs   =   null;   
    return   buffer;    }