On further examination, it seems that when using mono_set_dirs (), is looking
for:
lib/mono/4.0
AND
lib/mono/gac
Is there a way to avoid requiring the gac for an application with embedded
mono? A strace on all file open attempts shows that the gac is key to
allowing the enumeration of types in System.Core.dll. How do I work around
this? I don't want the file overhead of the gac if I can help it. Just want
to be able to indicate the 3 dependent assemblies.
Here are the calls (I have a very trimmed 2.10.6 distribution under
"/home/jshore/Dev/EA/Isolated/dist"):
open("/home/jshore/Dev/EA/Isolated/lib/noarch/com.gf.core.dll", O_RDONLY) = 3
open("/home/jshore/Dev/EA/Isolated/dist/lib/mono/4.0/mscorlib.dll", O_RDONLY) =
3
...
open("/home/jshore/Dev/EA/Isolated/dist/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll",
O_RDONLY) = 3
open("/home/jshore/Dev/EA/Isolated/dist/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll",
O_RDONLY) = 3
Why doesn't mono look in lib/mono/4.0 for System.Core.dll?
On Apr 2, 2012, at 8:26 PM, Jonathan Shore wrote:
> Hi,
>
> So I've been running some embedded apps with mono for a while successfully.
> In each case have a full mono installation available locally on the box on
> which the application is run.
>
> I needed to create a minimal mono environment so can run the app with
> embedded mono, but without a full mono installation. My application just
> depends on mscorlib.dll, System.Core.dll, and System.Data.dll (4.0). I am
> testing on a virgin install of ubuntu 10.4, which for better or worse has an
> ancient mono installed (2.4.4), but would represent the typical target
> environment.
>
> I created a very minimal install and directed the mono VM to find what it
> needs in the application-local install, with:
>
> mono_set_dirs (myapp_lib, myapp_etc);
> This appears to work as expected. Was able to load my assembly and start
> evaluation of a function. However, ran into a problem when one of the
> functions attempts to use reflection to find a type. I called
> Assembly.GetTypes() on the System.Core assembly, but throws the following
> exception:
>
> searching assembly: System.Core, Version=4.0.0.0, Culture=neutral,
> PublicKeyToken=b77a5c561934e089
> exception: System.Reflection.ReflectionTypeLoadException: The classes in the
> module cannot be loaded.
> at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes
> (System.Reflection.Assembly,bool)
> at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0
>
> (the "searching" message is a diagnostic from my code). I believe it
> successfully located System.Core, but for some reason is failing to load the
> classes. Previously I did not have System.Core.dll in the same directory
> with my application dll and it complained about not finding (so it has
> definitely found the dll).
>
> Any ideas on what causes the System.Reflection.ReflectionTypeLoadException to
> be thrown?
>
> My setup is as follows:
>
> $ ls lib
> com.gf.core.dll mono System.Core.dll System.Data.dll
>
> $ ls mono
> 2.0 4.0
>
> $ ls mono/2.0
> mscorlib.dll System.Core.dll System.Data.dll
>
> $ ls mono/4.0
> mscorlib.dll System.Core.dll System.Data.dll
>
> In my code, mono_set_dirs (...) is set to point to lib, and appears to pick
> up the dlls correctly. Would the exception result from a DLL dependency or
> environmental element that is required? Could the ancient mono 2.4.4
> bundled with ubuntu be interfering?
>
>
> Thanks
> Jonathan
>
_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/mono-devel-list