Mono 5.12.0 Release Notes

Release date: 08 May 2018

Release History

  • - Stable Release (08 May 2018)


In Depth



A lot of work has been put in stabilising and passing our test suite. Progress has been quite fast and we now pass most of the runtime, mcs, mscorlib and Mono.Debugger.Soft test suites. We are also reaching the point where the Interpreter is able to build the full Base Class Library with Mono C# compiler (mcs).


@NattyNarwhal has made the great effort of porting Mono on IBM AIX and i! While a lot features work, such as BoringTLS, other things do not, such as the ahead-of-time compiler or Roslyn. For any question about this port, please join the discussion in our Discord channels.


@NattyNarwhal has also made the Haiku port support amd64; unfortunately neither i386 and amd64 work just yet due to various runtime termination issues.


The WebAssembly port features better support through the Mono SDKs effort and several issues were fixed around GC and Base Class Libraries.


We now have an option to support jemalloc as the malloc(3) library, its speed allows for faster desktop applications. You’ll need to compile Mono with --with-jemalloc to enable it and then set MONO_USE_JEMALLOC environment variable at runtime. Jemalloc is known to have much better performance than system memory allocators and is safe in concurrent/re-entrant situations.

Profiler: improved GC roots reporting

A rework of the mechanism to report GC roots allows both the Xamarin.Profiler as well as mprof-report to better track their lifetimes.


Added support for nanosecond resolution in file information on platforms where the information is available. This means the return value of APIs like FileInfo.GetLastWriteTime () is now more precise.

Diagnostic enhancements

The diagnostic support to inspect generated native code via MONO_VERBOSE_METHOD environement variable was extended to support multiple entries.

Class Libraries

HttpWebRequest async handling has been rewritten. This resolves many long-standing and hard to reproduce issues involving requests cancellation or timeout. As HttpWebRequest is used as the underlying implementation by other types like HttpClient this should improve the reliability of a broad range of types.

A few internal types were decorated with StackTraceHiddenAttribute to produce more readable managed stack-traces. The improvement will be most noticeable in scenarios involving ExceptionDispatchInfo (e.g. async stack-traces).

The System.Security.Cryptography.Xml namespace in the System.Security assembly has been replaced with the CoreFX implementation. This makes Mono XML Signature (also called XMLDSig) support highly compatible with .NET.

The ICSharpCode.SharpZipLib assembly was marked as obsolete and will be removed in a future release. We recommend replacing the very old implementation we ship with the official NuGet package available at



A new tool called the Linker Analyzer was introduced, available via the illinkanalyzer command. It helps in advanced scenarios to analyze dependencies which were recorded during linker processing and caused the linker to mark an item to keep it in the resulting linked assembly.

VB.NET compiler

We now ship the Roslyn based VB.NET compiler. This is a fully featured VB.NET compiler integrated in msbuild but is also available via the vbc command which supports significantly more features than the old vbnc compiler. We are going to deprecate the old vbnc compiler and we encourage everyone to test the new tool.

Bug Fixes

  • Bugzilla #41294 - Some Mono threadpool performance counters return 0
  • Bugzilla #45901 - Missing .NET code pages ibm775 & ibm737
  • Bugzilla #56071 - Mono.Security.AuthenticodeBase Doesn’t Support PE32+ image format
  • Bugzilla #58413 - Environment.Tickcount is changed when the date is changed in android
  • Bugzilla #59184 - MethodInfo.Invoke fails for generic methods with too many/too large arguments
  • Bugzilla #60088 - Assertion at ../../../../external/mono/mono/mini/debugger-agent.c:4765, condition `array->len == 1’ not met
  • Bugzilla #60225 - Coverage output is missing some types and methods
  • Bugzilla #60298 - LayoutKind.Explicit, Size = 12 ignored with 64bit alignment
  • Bugzilla #60359 - AssemblyName.set_CultureName is not implemented
  • Bugzilla #60568 - WaitHandle.WaitOne(int) doesn’t trigger SynchronizationContext.Wait
  • Bugzilla #60756 - A crash with CEE_RET: value type stack: 0 vs. 8
  • Bugzilla #60848 - Incorrect unicode custom attribute decoding
  • Bugzilla #60862 - Stack overflow throws null (null is caught)
  • Bugzilla #60900 - Error using implicit operator with Nullable
  • Bugzilla #60986 - Memory leak when marshalling Delegate to native code
  • Bugzilla #61202 - Fatal error when adding aspect ratio constraint
  • GitHub #6169 - Thread objects are being leaked
  • GitHub #6187 - mkbundle Linux - program doesn’t run on system unless mono-core is installed
  • GitHub #6192 - System.Reflection.Emit: PropertyBuilder with generic type doesn’t add generic parameter
  • GitHub #6264 - Creating a new instance of X.509 certificate out of another, empty instance of X.509 certificate must not throw
  • GitHub #6283 - Mono is not able to notice a file change in a FileInfo object
  • GitHub #6320 - [arm] unaligned access in ves_icall_System_ValueType_Equals
  • GitHub #6339 - System.TypeLoadException is thrown when run .net standard library with Mono
  • GitHub #6343 - mono/utils/jemalloc does not exist
  • GitHub #6349 - messages during make dist: “file name is too long”
  • GitHub #6379 - Reenable System.Runtime.CompilerServices.Unsafe-xunit test on 32bit
  • GitHub #6383 - System.Diagnostics.ProcessTest.Start1_FileName_NotFound failing
  • GitHub #6401 - Invalid array cast is supported
  • GitHub #6411 - System.Numerics structs are incorrect sizes
  • GitHub #6464 - Socket.Send misses data on Windows
  • GitHub #6490 - Reenable weak-fields.exe test
  • GitHub #6777 - Memory corruption in Mono
  • GitHub #6848 - netstandard facade dlls have different public key tokens
  • GitHub #6940 - DNS lookup of IPv6-only hosts fails
  • GitHub #6948 - [XI]WatchOS apps fail to build with error “Undefined symbols for architecture armv7k” using XI with mono-2017-12 support
  • GitHub #6998 - Runtime assert in System.Runtime.Remoting
  • GitHub #7016 - Hybrid AOT is not working for some generic methods
  • GitHub #7085 - Hybrid AOT breaks setting thread UI culture
  • GitHub #7086 - Hybrid AOT throws invalid cast exception on dictionaries indexed with enum
  • GitHub #7095 - Assertion at class-accessors.c:31, condition `mono_class_is_ginst (klass)’ not met
  • GitHub #7184 - MSBuild always recompiles project if it has a resx with a windows path
  • GitHub #7240 - dim-sharedgenerics.exe fails with LLVM
  • GitHub #7262 - .config with dllmap not working with app domains with shadow copying enabled
  • GitHub #7289 - Creating EnumMirror fails in a multi-domain context.
  • GitHub #7338 - Finalizer crashes because of FileSystemWatcher Dispose exception in FileSystemWatcher_mobile.cs
  • GitHub #7364 - watchOS/LLVM crashes at launch on device
  • GitHub #7389 - System.CodeDom.Compiler.CodeDomConfigurationHandler throws on initialization
  • GitHub #7536 - Missing Facades from net_4_x that are in 4.7.1.
  • GitHub #7637 - iOS release build: “Could not AOT the assembly” -> “p - buf < buf_size not met”
  • GitHub xamarin/maccore#628 - mscorlib/Mac/Full: LocalId (MonoTests.System.TimeZoneInfoTest+PropertiesTests.LocalId) fails
  • GitHub xamarin/maccore#629 - iOS 32-bit sim: TimeZoneTest.TestCtors (D02) fails


Aleksey Kliger, Alex Earl, Alex Rønne Petersen, Alexander Köplinger, Alexander Kyte, Alexis Christoforides, Andrew Au, Ankit Jain, Atsushi Eno, Balló György, Bernhard Urban, Calvin Buckley, David Karlaš, Eberhard Beilharz, Egor Bogatov, Etienne Champetier, Jason Imison, Jay Krell, Jo Shields, Johan Lorensson, Jonathan Chambers, Josh Peterson, Katelyn Gadd, Li Keqing, Ludovic Henry, Manuel de la Pena, Marek Habersack, Marek Safar, Marius Ungureanu, Martin Baulig, Mathieu Bourgeois, Michael DeRoy, Michael Sørensen, Miguel de Icaza, Mikhail Filippov, Pete Lewis, Radek Doulik, Ramin Zaghi, resurrexit, Robert Nagy, Rodrigo Kumpera, Rolf Bjarne Kvinge, Usevalad Sauta, Sebastien Lebreton, Vlad Brezae, Vladimir Kazakov, YuriyGS, Zoltan Varga