Justin,

Thanks for pointing me in a direction, this was -very- helpful.  It wasn't
nearly as straightforward as I was expecting, but it did give me the
opportunity/excuse to get my hands dirty and dig into the projects and code
a bit.  I'm going to document the process a bit here, so it gets archived
for future reference.  I'm pretty sure I've narrowed down the steps needed.
The actual project that needs the assembly reference added to it is
OpenSim.Region.ScriptEngine.Shared.CodeTools, but this is just the start.
This gets the assembly detectable by the compiler.  The next step is adding
the reference to the script being compiled.  In
OpenSim.Region.ScriptEngine.Shared.CodeTools.Compiler (Compiler.cs), in the
function CompileFromDotNetText, there is a section where
ReferencedAssemblies are added to the compiler as parameters, and the
assembly needs to be added here as well.  For example, to add a standard
library, the following line would be used:

parameters.ReferencedAssemblies.Add("System.dll");

Which, it turns out, I needed to do, as System.dll isn't added by default,
and our test script included a try/catch where Exception was not detected as
a type.  To add something like the MySql dll that comes with OpenSim, it
would look like this:

parameters.ReferencedAssemblies.Add(Path.Combine(rootPath,"MySql.Data.dll"
));
The script engine automatically wraps scripts in boilerplate code to put
them inside a class and make them compilable.  This has the side-effect of
making "using" or "import" statements inside scripts impossible, so these
also need to be added to the code.
For example, if your script is C#, then the function to alter is
CreateCSCompilerScript
(in the same Compile.cs), adding the using statement to the list inside this
function.

If I get the chance later this summer, I may try to develop a more robust
system that attempts to (at the very least) detect the default mono/.net
libraries and automatically adjust this boilerplate to include them...

Again, thanks for the help!

--Jeremy Lothian

On Fri, May 14, 2010 at 9:19 PM, Justin Clark-Casey <
jjusti...@googlemail.com> wrote:

> J Lothian wrote:
>
>> Greetings,
>>  I'm a developer working on a research project that we are migrating from
>> Second Life to OpenSim.  We're currently exploring options and new features
>> that may be available in OpenSim that we did not have in Second Life.  One
>> of these items is the ability to add a custom assembly reference to be
>> available for scripts within the scripting engine (in C# mode).  I am very
>> unfamiliar with the mono/nant build process.  I searched for this question a
>> bit and couldn't find anything very related.  Could someone point me towards
>> which files I should be looking at to add an assembly reference?  Is this
>> even possible?  Also, apologies if this is the wrong list, I wasn't sure if
>> this was a user or developer question.
>>
>
> If you want to directly call your own C# assembly from within C# scripts,
> then I believe that you would have to explicitly add those assemblies to
> prebuild.xml before regenerating the solution files with
> prebuild.sh/prebuild.bat.
> The project you would need to add to is
> OpenSim.Region.ScriptEngine.Shared.Api, I think.  However, some of this is
> supposition - I've never tried this before.  I don't think there is any
> documentation on it.
>
> --
> Justin Clark-Casey (justincc)
> http://justincc.org
> http://twitter.com/justincc
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev@lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
>
_______________________________________________
Opensim-dev mailing list
Opensim-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/opensim-dev

Reply via email to