Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=75419 --- shadow/75419 2005-06-29 08:03:57.000000000 -0400 +++ shadow/75419.tmp.21237 2005-06-29 08:03:57.000000000 -0400 @@ -0,0 +1,102 @@ +Bug#: 75419 +Product: Mono: Class Libraries +Version: 1.1 +OS: +OS Details: Gentoo +Status: NEW +Resolution: +Severity: +Priority: Normal +Component: CORLIB +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: AppDomain does not honor AppendPrivatePath search path. + +Please fill in this template when reporting a bug, unless you know what you +are doing. +Description of Problem: + +A plug-in framework I'm writing uses AppDomain.AppendPrivatePath to specify +additional directories the AppDomain is supposed to use to resolve +assemblies that correspond with the directories in the framework's search +path. Loading the dll file into a byte array, then subsequently calling +Load on the byte array from an AppDomain fails because it cannot resolve +the assembly. + +Out of curiosity, why is the AppDomain attempting to resolve the assembly +even though the entire assembly is in the byte array? + +Steps to reproduce the problem: +1. Compile an AppDomain loading app that uses runtime search path additions +using AppendPrivatePath. +2. Try to load an assembly within the runtime added directory. +3. + +Actual Results: + +FileNotFoundException + +Expected Results: + +Everything works okay. + +How often does this happen? + +Every time. + +Additional Information: + +Here is the relevant code from the library: + + // Loads the content of a file to a byte array. + protected byte[] LoadRawFile (string _filename) { + FileStream _fs = new FileStream (_filename, FileMode.Open); + byte[] _buffer = new byte [(int) _fs.Length]; + _fs.Read (_buffer, 0, _buffer.Length); + _fs.Close (); + + return _buffer; + } + + protected string SearchForModule (string _name) { + foreach (string s in _search_path) { + if (Directory.Exists (s)) { + foreach (string f in Directory.GetFiles (s, "*.dll")) { + string _f = f.Replace (s, "").Replace ("/", ""); + Console.WriteLine ("Checking {0} against {1} ({2}) (Result: {3})", +_name, _f, + _f.Substring (0, _f.Length - 4), (_f.Substring (0, _f.Length - 4) == +_name)); + if (_f.Substring (0, _f.Length - 4) == _name) { + return s + "/" + _f; + } + } + } + } + + return null; + } + +( in the LoadModule method ) + + AppDomain _tempDomain = AppDomain.CreateDomain ("_temp_" + _name); + + byte[] _raw_bytes = LoadRawFile (_filename); + + // set up the search path + foreach (string s in _search_path) { + _tempDomain.AppendPrivatePath (s); + } + + // The throw here is mostly used from dep resolver calls, although it +should also be caught by the immediate caller + // (i.e. the application). + try { + _tempDomain.Load (_raw_bytes); + } catch (BadImageFormatException e) { + throw new ModuleImageException (e.Message); + } _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
