Mono 5.10.0 Release Notes

Release date: 26 Feb 2018

Release History

  • 5.10.0.160 - Stable Release (07 Mar 2018)
  • 5.10.0.140 - Stable Release (26 Feb 2018)

Preview Releases
  • 5.10.0.160 released on 07 Mar 2018
  • 5.10.0.157 released on 06 Mar 2018
  • 5.10.0.154 released on 05 Mar 2018
  • 5.10.0.153 released on 02 Mar 2018
  • 5.10.0.147 released on 01 Mar 2018
  • 5.10.0.144 released on 28 Feb 2018
  • 5.10.0.141 released on 27 Feb 2018
  • 5.10.0.140 released on 24 Feb 2018
  • 5.10.0.137 released on 23 Feb 2018
  • 5.10.0.132 released on 22 Feb 2018
  • 5.10.0.129 released on 19 Feb 2018
  • 5.10.0.125 released on 19 Feb 2018
  • 5.10.0.116 released on 15 Feb 2018
  • 5.10.0.107 released on 14 Feb 2018
  • 5.10.0.105 released on 13 Feb 2018
  • 5.10.0.103 released on 10 Feb 2018
  • 5.10.0.101 released on 9 Feb 2018
  • 5.10.0.97 released on 8 Feb 2018
  • 5.10.0.94 released on 7 Feb 2018
  • 5.10.0.91 released on 6 Feb 2018
  • 5.10.0.83 released on 5 Feb 2018
  • 5.10.0.79 released on 2 Feb 2018
  • 5.10.0.78 released on 31 Jan 2018
  • 5.10.0.71 released on 30 Jan 2018

Highlights

In Depth

Runtime

Interpreter

The interpreter is now compiled in by default into Mono, and you can use it by running mono --interpreter. Check out the recent interpreter blog post for more details about this work.

We are getting closer to get the interpreter working with JIT/AOT and on mobile:

  • exception handling and debugger support has been unified with JIT/AOT
  • we support more AppDomain and Remoting cases

It is not yet as feature complete as the JIT, so there will be some behavior differences or breakages; we are currently working on making our complete test suite pass.

Default Interface Methods

The runtime now supports Default Interface Methods, we now only miss the C# compiler support.

Mono SDKs

This is a new way of building Mono for some of the platforms that we support: Android, iOS and WebAssembly. The goal is to move most of the build logic into Mono so that we can more easily make changes and test those platforms as part of CI.

You can find some documentation at the README and Makefile build targets.

This is still a work-in-progress, we’ll make it easier to use with upcoming releases, and more documentation will also be added.

WebAssembly port

This is the first release where the interpreter can reliably run most of the class libraries test suite. Multiple bugs affecting the Basic Class Libraries were fixed. The WebAssembly port is leveraging the work done around Mono SDKs to provide an improved developer experience to those working on mono. While there will be no official release at this point, the adventurous ones can try our code drops directly from CI.

Dedicated Coverage profiler

The coverage profiler has been extracted from the log profiler, making it much more lightweight. It also removes the dependency on mprof-report to generate the XML report, and instead generates the report directly. You can find more documentation by looking at the COVERAGE PROFILER section of the mono-profilers man page.

Support for Android Unified Headers

Android NDK unified headers required changes to the way Mono detects real-time signal definitions (SIGRTMIN/SIGRTMAX), as well as a number of workarounds for 64-bit API declarations on target platforms (< API 24) which do not have the correct declarations. A number of compatibility tweaks was also done to declarations of fgetpos, fsetpos, mmap, sendfile and statvfs calls. Mono builds targeting Android require that the __ANDROID_API__ macro is set to the target platform level (e.g. 21, 24 or O)

ARM Memory Barriers

Explicitly encode memory barrier type on ARM64, instead of relying on undefined behaviour according to the ARMv8 ABI. This is to respect the ARM specification closer, reducing the risk of hardware-specific bugs.

AOT Size Reduction via Code Deduplication

We now support deduplicating generics code across assemblies. For example, code for List<int> is now deduplicated for usage in the user code and System.dll.

Class Libraries

The recently announced .NET 4.7.1 is now supported and available as a specific target via MSBuild configuration.

The System.Data assembly was fully replaced with CoreFX implementation resolving many limitations and corner cases issue we had as well as implementing missing features and APIs.

Significant parts of System.Security assembly implementation were replaced with CoreFX implementation.

Tools

C# compiler

The Roslyn compiler (csc) has been updated to version 2.6.0 which includes all C# 7.2 features.

The Mono C# compiler (mcs) gained support for the following C# 7.x features:

  • default literal
  • non-trailing named arguments
  • discards
  • tuples implicit deconstruction
  • generalized async return types
  • stackalloc to Span assignment conversion
  • ref struct
  • readonly structs

F# compiler

The F# compiler was updated to the latest 4.1 version.

The FSharp.Core.dll assembly is no longer installed into the GAC, solving many problems users faced when using NuGets.

MSBuild

MSBuild was updated to the latest version available.

Mono’s list of incompatible NuGet assemblies was extended and updated which should help with NuGets which bundle the same assemblies as installed by Mono as those are now skipped.

Bug Fixes

  • Bugzilla #19503 - Process.Start on OS X fails silently for missing file
  • Bugzilla #20562 - Seeming valid IL produces invalid result
  • Bugzilla #40699 - Console.ReadXXX does not echo input after TermInfoDriver is initialized
  • Bugzilla #45893 - I18N: EncoderFallbackBuffer.Fallback gets next character instead of the current one
  • Bugzilla #50189 - SGEN XMM scanning: Linux/Intel (32 + 64)
  • Bugzilla #50190 - SGEN FPU scanning: Darwin/ARM64
  • Bugzilla #52675 - HttpListener doesn’t work with SSL
  • Bugzilla #53296 - Latin1Encoding throws exception on Mono when it doesn’t on MS.NET
  • Bugzilla #56003 - URI returns wrong absolute path on OSX when File name is UTF-8
  • Bugzilla #56194 - SIGSEGV on System.Runtime.CompilerServices.RuntimeHelpers.InitializeArray()
  • Bugzilla #56727 - Runtime crashes when disposing DeflateStream
  • Bugzilla #57892 - Static lib in the msi distrib doesn’t resolve all symbols
  • Bugzilla #57893 - mkbundle is not working on Windows
  • Bugzilla #57938 - Differences in behavior Type.Fullname in Mono and .NET Framework when Type is a generic type that is not a generic type definition but contains unresolved type parameters
  • Bugzilla #58400 - System.Uri broken with files
  • Bugzilla #58411 - System.Security.Cryptography.CryptographicException: Store root doesn’t exist
  • Bugzilla #59080 - Type information of underlying type for enums compiled by Mono.CSharp.dll seems to be incorrect
  • Bugzilla #59182 - Crash/SIGSEGV with interop callback with struct parameter from native to managed on Xamarin.Android on armv7
  • Bugzilla #59184 - MethodInfo.Invoke fails for generic methods with too many/too large arguments
  • Bugzilla #59393 - NullReferenceException when MonthCalendar clicked out of min/max date
  • Bugzilla #59608 - Attribute MethodImplOptions.AggressiveInlining causes method to always return NULL
  • Bugzilla #59664 - Type.GetType(“”, true) throws ArgumentException on Mono but TypeLoadException on .NET
  • Bugzilla #59832 - [iOS]MT3001 error: Could not AOT the assembly error while building iOS/mobile samples
  • Bugzilla #59881 - DllImport calls a wrong function if its function number greater than 65535
  • Bugzilla #59909 - WebInvokeAttributeTest.RejectTwoParametersWhenNotWrapped() fails on Android
  • Bugzilla #59916 - get_current_locale_name fails under the load with String conversion error: Illegal byte sequence encounted in the input
  • Bugzilla #59956 - [llvm][bitcode] [FAIL] UniqueIdTest.Ctor_Id (System.Runtime.Serialization tests)
  • Bugzilla #60028 - Timer doesn’t throw ODE after Dispose()
  • Bugzilla #60029 - AsyncLocal inconsistency with .NET
  • Bugzilla #60175 - AOT mis-compiles when coverage is used
  • Bugzilla #60224 - Coverage profiler uses type names which don’t exist
  • Bugzilla #60233 - Assertion in dynamic-image.c after 792b5367cd3a6ffa1a192c4d2d7ace3509cbb646
  • Bugzilla #60238 - Mono assertion hit when using csharp repl
  • Bugzilla #60255 - Wrong exception in emulated opcodes
  • Bugzilla #60267 - Inconsistent symlink traversal results
  • Bugzilla #60288 - Large Array Initializer Causes TypeLoadException
  • Bugzilla #60298 - LayoutKind.Explicit, Size = 12 ignored with 64bit alignment
  • Bugzilla #60317 - Stuck WebRequest
  • Bugzilla #60422 - Native crash due to unhandled errno values when accessing files on networked filesystems
  • Bugzilla #60435 - The DataGridViewRow.CreateCellsInstance method is never invoked
  • Bugzilla #60539 - mini-codegen.c:1265, condition `reginfo [sreg].born_in > 0’ not met
  • Bugzilla #60545 - Multiple argument generic with contravariant interface as an argument causes MissingMethodException
  • Bugzilla #60621 - XmlDocument.Load() throws WebException when DTD url is not reachable
  • Bugzilla #60634 - Assertion failure ‘align > 0’ happening as of d15-5
  • Bugzilla #60680 - C# 7 ref returns fail to compile
  • Bugzilla #60771 - Attempting to JIT compile method ‘System.Runtime.CompilerServices.Unsafe:Add (byte&,int)’ while running in aot-only mode
  • Bugzilla #60865 - * Assertion at mini-codegen.c:2264, condition `sp > 0’ not met
  • 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 #6320 - [arm] unaligned access in ves_icall_System_ValueType_Equals
  • GitHub #6339 - System.TypeLoadException is thrown when run .net standard library with Mono
  • GitHub #6383 - System.Diagnostics.ProcessTest.Start1_FileName_NotFound failing
  • GitHub #6401 - Invalid array cast is supported
  • GitHub #6414 - sbyte comparison broken by optimization
  • GitHub #6490 - Reenable weak-fields.exe test
  • GitHub #6721 - Negate operation on uint.MaxValue gives wrong result on arm64
  • GitHub #6777 - Memory corruption in Mono 5.8.0.108.
  • GitHub #6848 - netstandard facade dlls have different public key tokens
  • GitHub #6848 - [XI]WatchOS apps fail to build with error “Undefined symbols for architecture armv7k” using XI with mono-2017-12 support
  • GitHub #6940 - DNS lookup of IPv6-only hosts fails
  • GitHub #7086 - Hybrid AOT throws invalid cast exception on dictionaries indexed with enum
  • GitHub #7093 - Regression in Array interface conversions
  • GitHub #7095 - Assertion at class-accessors.c:31, condition ‘mono_class_is_ginst (klass)’ not met
  • GitHub #7262 - .config with dllmap not working with app domains with shadow copying enabled
  • GitHub #7338 - Finalizer crashes because of FileSystemWatcher Dispose exception in FileSystemWatcher_mobile.cs
  • GitHub #7364 - watchOS/LLVM crashes at launch on device
  • GitHub #7408 - No longer builds with CentOS 6 (GCC 4.4.7)
  • GitHub #7637 - iOS release build: “Could not AOT the assembly” -> “p - buf < buf_size not met”
  • GitHub xamarin/maccore#629 - iOS 32-bit sim: TimeZoneTest.TestCtors (D02) fails

Contributors

Aleksey Kliger, Alex Rønne Petersen, Alexander Kyte, Alexander Köplinger, Alexis Christoforides, Andreas Lindh, Ankit Jain, Bernhard Urban, Brendan Zagaeski, Chris Hamons, Cody Russell, Dave Curylo, David Karlaš, Egor Bogatov, Hugh Bellamy, Jo Shields, Johan Lorensson, Jon Purdy, Jonathan Chambers, Jonathan Peppers, Jonathan Pryor, Josip Medved, Katelyn Gadd, Konstantin Safonov, Lluis Sanchez, Ludovic Henry, Manuel de la Pena, Marek Habersack, Marek Safar, Marius Ungureanu, Martin Baulig, Miguel de Icaza, Mikhail Filippov, Nate Woolls, Neale Ferguson, Radek Doulik, Rodrigo Kumpera, Rolf Bjarne Kvinge, Stephen C. Wills, Uri Simchoni, Vincent Povirk, Vlad Brezae, Vladimir Kargov, Vladimir Kazakov, YuriyGS, Zoltan Varga, cherusker, lateralusX, markusbeth, oittaa, robotrovsky, vinogradniy