问题描述
大家好现在项目A反射A1(A并没有引用A1)但A1引用了A2(A并没有引用A2)A1调用了A2中的方法构成了依赖引用byte[]b=File.ReadAllBytes(path+dll);b=File.ReadAllBytes(path+dll);Assemblyassembly=Assembly.Load(b);vara=assembly.GetReferencedAssemblies();vartypes=assembly.GetTypes();vartype=assembly.GetType("TW.Action1.Action1");varaction=(IJob)Activator.CreateInstance(type,true);vara=action.GetName()+action.Exectuce();在调用方法时会报找不到A2,如果想能执行怎么样才能把A3加载进来呀,谢谢
解决方案
解决方案二:
没有实例怎么调用啊。至少来个静态的也好。
解决方案三:
这个讨论中的方法应该可以解决:一下来自上面的帖子:Appdomainhasaneventwhichisfiredifitcan'tfindareference:AppDomain.CurrentDomain.AssemblyResolve+=newResolveEventHandler(CurrentDomain_AssemblyResolve);
Intheeventhandleryoucansearchfortheassemblymanually:AssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){strings=@"C:lib"+args.Name.Remove(args.Name.IndexOf(','))+".dll";returnAssembly.LoadFile(s);}
解决方案四:
A不引用A1,能反射到A1?????
解决方案五:
如果你所谓的A反射A1A和A1不过是同一个命名空间下的2个类,那就没有疑问了你最好说清楚A,A1,A2都是些啥玩意
解决方案六:
问题都描述得不清楚
解决方案七:
我这个怎么感觉你是要A反射调用A1,A1反射调用A2的节奏啊,A2反射调用A3的节奏啊报找不到是你没将dll添加进bin目录
解决方案八:
引用2楼findcaiyzh的回复:
这个讨论中的方法应该可以解决:一下来自上面的帖子:Appdomainhasaneventwhichisfiredifitcan'tfindareference:AppDomain.CurrentDomain.AssemblyResolve+=newResolveEventHandler(CurrentDomain_AssemblyResolve);Intheeventhandleryoucansearchfortheassemblymanually:AssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){strings=@"C:lib"+args.Name.Remove(args.Name.IndexOf(','))+".dll";returnAssembly.LoadFile(s);}
非常感谢,已经解决,但是现在有个新问题,就是我在反射时可能面对不同版本的DLL,如果我把A1引用A2,B1也引用了A2,A1先反射程序正在执行,在这里我又反射B1但A2的版本发生了变化,想A1和B1同时调用A2的不同版本怎么做呀?
解决方案九:
非常感谢,已经解决,但是现在有个新问题,就是我在反射时可能面对不同版本的DLL,如果我把A1引用A2,B1也引用了A2,A1先反射程序正在执行,在这里我又反射B1但A2的版本发生了变化,想A1和B1同时调用A2的不同版本怎么做呀?你觉得这样做有意义吗如果程序运行中DLL变了,你还期待能获得正确的执行结果??
解决方案十:
而且A1如果正在调用A2,你这个DLL正在被占用,怎么可能被替换成新版本?