Mono 5.10.0 Release Notes
- 220.127.116.11 - Stable Release (07 Mar 2018)
- 18.104.22.168 - Stable Release (26 Feb 2018)
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.
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.
This is still a work-in-progress, we’ll make it easier to use with upcoming releases, and more documentation will also be added.
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 (
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
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
The recently announced .NET 4.7.1 is now supported and available as a specific target via MSBuild configuration.
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.
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
- tuples implicit deconstruction
- generalized async return types
- stackalloc to Span
- ref struct
- readonly structs
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 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.
- 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
- GitHub #6192 - System.Reflection.Emit: PropertyBuilder with generic type doesn’t add generic parameter
- GitHub #6320 - [arm] unaligned access in
- 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 22.214.171.124.
- 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
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