Mono Support |
How to use Nova CodeDOM on Mono.
Although .NET assemblies can theoretically be run on Mono without changes, there are often reasons to create special versions such as unsupported libraries, lack of support for PInvokes to OS APIs, and various runtime environment differences. For various such reasons and also due to requirements of the licensing software we use, we must provide a specially built version of Nova CodeDOM for Mono. We chose to keep the assembly name the same, storing it under the 'Mono' subdirectory under the installation location, and we also include a Mono version of Nova.CLI.exe for testing purposes. A Mono version of Nova.Studio.exe is not provided because Mono does not currently support WPF.
When running the Mono version of Nova.CLI.exe, you will see "(Mono)" after the version header. If you accidentally run the Mono version of Nova.CodeDOM.dll on .NET, or vice-versa, an exception will be thrown. Your license code will work with both versions.
Because you must reference a different copy of Nova.CodeDOM.dll and perhaps make other changes to your code to run on Mono, we suggest making Mono-specific solution and project files that define a "MONO" conditional-compilation symbol and build to a different output directory while containing the same source files as your .NET version.
You might run into the following issues when running on Mono:
Due to file system differences between platforms, you should use slash (/) instead of backslash (\) when working with file paths in Mono. You can make use of Path.DirectorySeparatorChar and/or Path.Combine() to create cross-platform code. Also, Linux file systems are case sensitive and don't use drive letters. You can set "MONO_IOMAP=all" to automatically ignore case and remove drive letters.
Many .NET BCL (base class library) assemblies are not supported on Mono. You will have to avoid using unsupported assemblies, find alternatives, or implement your own replacement code.
You may see the error, "Fatal error in GC: Too many heap sections". This seems to be a known issue with the Mono GC which has existed for some time, but never completely fixed. A workaround may be available which requires re-building Mono to increase the heap size. Another possible workaround is to re-spawn a new process each time you load a solution in Nova CodeDOM in order to reset the heap.