[Opensim-dev] Proposal for removing "ERROR: There was an error while scanning assembly:" messages
Justin Clark-Casey
jjustincc at googlemail.com
Fri Apr 18 19:00:38 UTC 2008
Hello,
This is a technical post but I'm copying it to users for information.
You may (or may not) want to stop reading quickly :-)
So, some of you may have noticed that the latest OpenSim revisions now
have many more of the subject error messages on the console. The cause
is the Mono Addins manager we're using, which writes these errors to the
console if the dll doesn't contain the configuration data it's expecting.
So today I looked at removing these errors. I had to follow several
lines of investigation.
1. My initial thought was to move all the external libraries which are
causing the problem to a separate $OPENSIM_ROOT/lib/ext directory.
However, this means changes to make sure that the dlls can be found in
the new directory. For a cross platform application, it's hard. On
Microsoft's CLR we can simply use <Probing> in config files. However,
Mono does appear to support this, at least according to
http://www.mono-project.com/Assemblies_and_the_GAC
I tried it anyway, without success. Instead, the only option on Mono is
to either set the MONO_PATH or put the assemblies in the Global Assembly
Cache.
2. This makes things awkward, so instead I looked at moving the plugin
dlls. Same problem.
3. So instead I looked at simply suppressing the messages.
Unfortunately, the Mono addins code writes these messages out to the
console. Although in theory you could give it an IProgressMonitor and
stop this, all the classes for this (and the interface) are internal and
hence not accessible. Later versions of mono-addins than the one we are
using would appear to have the same problem.
So although we could hack the code in 3. to remove the message (or even
replace or code our own plugin solution), the fact is that we really
need to have dlls in different directories eventually anyway - bin/ is
already overloaded. This means I'm forced to come back to suggestion
1. Putting things in the GAC is unrealistic at this stage I think, so
I'm proposing that we move all the external libraries to
$OPENSIM_ROOT/lib/ext and set the MONO_PATH environmental variable to
point to this directory. Under Windows, we would instead put <Probing>
entries in the executable's config files.
I tried setting MONO_PATH programatically in OpenSimMain.cs, but the set
doesn't look like it is exported so the load fails. The same path works
fine when exported from the command line.
If we go the MONO_PATH route, then I think we could provide shell
scripts for all the executables to set the path and then launch the
program, even though this is a little messy. The executable itself
would complain loudly if it is not on Windows and MONO_PATH is unset
(which would be inconvenient for Windows mono users, though there may
not be that many of them).
I'm open to constructive suggestions on this, particularly from core
developers.
--
justincc
Justin Clark-Casey
http://justincc.wordpress.com
More information about the Opensim-dev
mailing list