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

Reply via email to