Assembly.LoadFile 异常

问题:编写了一个监控文件夹里dll的程序,当有新dll的时候自动添加里面的类

VS里面调试启动没有任何问题

但是直接运行就会闪退  ????

解决

步骤一:

在Assembly.LoadFile 的时候加入try  捕捉到异常为 

Message: System.IO.FileLoadException: 另一个程序正在使用此文件,进程无法访问。 (异常来自 HRESULT:0x80070020)

检查了所有程序 没有人占用啊。。。。。。。。 还能删除

步骤二:

想起来 debug和直接运行的最大区别就是 直接运行会快很多。。。。。。

那索性等dll 拷贝完成试试    Thread.Sleep(1000);

   private static void LoadDllLoadMenu(string FullPath)
   {
       try
       {
           Thread.Sleep(1000);
           //动态加载程序集
           Assembly assembly = Assembly.LoadFile(FullPath);
           if (assembly != null)
           {
               {
                   获取程序集中指定的类类型,参数为:命名空间.类型名
                   //var type = assembly.GetType("ConsoleApp2.Xiaoa");

                   创建实例,方法一
                   //var obj = Activator.CreateInstance(type);

                   创建实例,方法二  ,参数为:命名空间.类型名    
                   var obj = assembly.CreateInstance("DynamicReferenceDLL.MyMath");

                   获取实例中的方法
                   //var method = type.GetMethod("e");

                   调用实例方法
                   //object result = method.Invoke(obj, new object[] { });
               }
               {
                   //Type t = nameSpaceAll.Where(x => x.Name == tableName.ToString()).FirstOrDefault();  
                   // assembly.GetTypes() //获取当前类库下所有类型
                   //.Where(t => typeof(I_Sl651).IsAssignableFrom(t)) //获取间接或直接继承t的所有类型
                   //.Where(t => !t.IsAbstract && t.IsClass) //获取非抽象类 排除接口继承

                   IEnumerable<Type> wormMain = assembly.GetTypes().Where(t => !t.IsAbstract && t.IsClass);
                   ListAgreementClass.AddRange(wormMain);
                   // m.GetInterface(typeof(I_Sl651).Name) != null);
                   //var tmpObj = (SL651Standard)Activator.CreateInstance(wormMain);

                   //tmpObj.LoadMenu();
               }
           }
       }
       catch (Exception ex)
       {
           Logging.SaveLog(ELogLayer.Transfer, ex.ToString(), ELogType.Error);
       }

再次直接运行 没问题了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值