c# - Assembly.LoadFrom() throw exception -
public assembly loadassembly(string assemblyname) //@"d://myassembly.dll" { m_assembly = assembly.loadfrom(assemblyname); return m_assembly; }
if put "myassembly.dll" both in d: , copy in "bin" directory, method excute successfully. however, delete 1 of them, throw exception. message below:
could not load file or assembly 'myassembly, version=1.0.0.0, culture=neutral, publickeytoken=null' or 1 of dependencies. system cannot find file specified.
i wanna load assembly exists in d:. why need put copy "bin" directory @ same time?
maybe myassembly.dll refers assembly arent in directory. put assemblies in same directory.
or can handle appdomain.currentdomain, assemblyresolve event load needed assembly
private string asmbase ; public void loaddassembly(string assemblyname) { asmbase = system.io.path.getdirectoryname(assemblyname); appdomain.currentdomain.assemblyresolve += new resolveeventhandler(currentdomain_assemblyresolve); system.reflection.assembly asm = system.reflection.assembly.load(system.io.file.readallbytes(assemblyname)); } private assembly currentdomain_assemblyresolve(object sender, resolveeventargs args) { //this handler called when common language runtime tries bind assembly , fails. //retrieve list of referenced assemblies in array of assemblyname. assembly myassembly, objexecutingassemblies; string strtempassmbpath = ""; objexecutingassemblies = args.requestingassembly; assemblyname[] arrreferencedassmbnames = objexecutingassemblies.getreferencedassemblies(); //loop through array of referenced assembly names. foreach (assemblyname strassmbname in arrreferencedassmbnames) { //check assembly names have raised "assemblyresolve" event. if (strassmbname.fullname.substring(0, strassmbname.fullname.indexof(",")) == args.name.substring(0, args.name.indexof(","))) { //build path of assembly has loaded. strtempassmbpath = asmbase + "\\" + args.name.substring(0, args.name.indexof(",")) + ".dll"; break; } } //load assembly specified path. myassembly = assembly.loadfrom(strtempassmbpath); //return loaded assembly. return myassembly; }
Comments
Post a Comment