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

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -