[Opensim-dev] Adding an assembly reference to make available via script
Melanie
melanie at t-data.com
Thu May 27 23:55:57 UTC 2010
A generic means to add extra libs would be highly DANGEROUS. It
definitely needs to be compile-time. Probably has to be, anyway,
from the way the scripts work.
Melanie
Justin Clark-Casey wrote:
> J Lothian wrote:
>> 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!
>
> Glad that was of some use! Would very much look forward to a boilerplate adjuster - being able to include extra libraries from OpenSim C# 'scripts' would be really useful.
>
> Also, it would be great if you could copy the above into a new wiki page off http://opensimulator.org/wiki/Developer_Documentation#Scripting. Things tend to stay a little bit more visible there. Thanks!
>
More information about the Opensim-dev
mailing list