项目下bin下有个my.dll,我先用Assembly.LoadFile()进来,取得dll的版本,和当前的比较.
如果不相等,就update,把新的my.dll覆盖旧的my.dll,用的File.Copy(src,des,true).
但系统提示旧的my.dll正在被另一个process使用.
所以我想是不是Assembly.LoadFile后把这个dll占住了,那怎么释放它呢?

解决方案 »

  1.   

    经过测试,是由于Assembly.LoadFile后把这个dll占住了,那怎么释放它呢?
    急啊,解决马上结贴
      

  2.   

    http://www.cnblogs.com/montaque/archive/2004/11/04/60478.aspx
      

  3.   

    http://www.cnblogs.com/wayfarer/archive/2004/11/04/47896.html
      

  4.   

    Assembly a = Assemble.LoadFile(path);
    a=null;
    试试
      

  5.   

    AppDomainSetup info = new AppDomainSetup();
    info.ApplicationBase = "file:///" + System.Environment.CurrentDirectory;
    AppDomain dom = AppDomain.CreateDomain("RemoteDomain", null, info);
    // Assembly coredll =Assembly.LoadFile(coredllPath); Assembly coredll = Assembly.LoadFile(coredllPath);
    AssemblyName name = coredll.GetName();    
    dllVersion = name.Version.ToString(); 
    //Object obj=asm.CreateInstance("HelloWorld");
    AppDomain.Unload(dom);
    //                    coredll = null;
    //dllVersion = "222";
    用了Unload还是不行,一样的错误,
    coredll = null也是一样.
    如果我注释掉所有的代码,只有dllVersion = "222";就没问题,说明load进来没释放.
      

  6.   

    codeproject上有代码http://www.codeproject.com/csharp/livecodedotnet.asp
      

  7.   

    你最好通过GC来回收一下,因为你在程序代码是实现了释放,但GC不一定立即就释放了,
    所以就有可能报程序集在使用的错误.
     AppDomain.Unload(dom);
    GC.Collect();
      

  8.   

    没办法,想了个笨办法,想把旧的dll copy到本地,在本地load,这样就不会出现占用的问题.
    但怎么释放还是没解决.
      

  9.   

    想了个笨办法,copy旧的dll到本地再load,这样就不会影响copy了,实验证明可行.
    但释放没释放还是不是太懂.
      

  10.   

    最简单的方法:
    在项目引用中添加“my.dll",然后把这个引用的CopyLocal属性改为True。重新编译就好了,之前你写的那些都不需要了