Mono 5.18.0 Release Notes
Highlights
- .NET 4.7.2 support
- Minimum macOS version changes
In Depth
General
Due to limitations in the TLS stack on 10.7 we are updating the minimum macOS development target from 10.7 to 10.9. Mono will be supported only on 10.9 or newer versions starting with this release.
Runtime
AOT
Few hard to track race conditions in trampolines unboxing for AOT backend targetting amd64 were fixed.
Interpreter
The interpreter received the first set of low-level optimizations, improving the execution time of typeof call by the factor of 10. Further changes were made to avoid unnecessary allocations and support Xamarin native types (nint/nuint).
Custom Marshalers
The logic handling custom marshalers, types implementing IICustomMarshaler has been mostly rewritten in managed code with additional caching mechanisms to match .NET Framework behaviour.
Optimizations
The intrinsics built on top of SSE41 for Math.Round/Math.Floor/Math.Ceiling were added.
Windows
Mono Windows cross-compiler is using the same LLVM release branch as Linux resolving issues in scenarios where llvm-config.exe can’t be run (none WSL/CygWin build target).
Class Libraries
CoreFX convergence
In this release, more CoreFX code was imported in particular in System.Reflection namespace. Many common types in mscorlib System namespace are now fully CoreFX based including System.Math. The Registry implementation on Windows is now fully based on CoreFX implementation.
Mono.Options
A new CommandSet.GetCompletions()
method was introduced, which returns all possible commands which match a given completion prefix. This is intended for e.g. bash completion support.
System.Runtime.InteropServices
It’s now possible to use RuntimeInformation
API to detect ARM and ARM64 platforms.
System.Drawing
Image loading routines have been hardened to have thorough checks for out of range inputs for various codecs.
Tools
MSBuild
Reference assemblies for .NET 4.7.2 are included to allow targeting .NET Framework 4.7.2 using MSBuild on Mono.
nuget
The nuget tool has been updated to the latest 4.8 version (4.8.2).
Resolved Issues
- #6352 - Bug in TextRenderer.DrawText on Linux
- #7087 - Calling TcpListener.Create(int port) on multiple threads can fail
- #8575 - GetCustomAttributes on a type from an assembly in the LoadFile context fails
- #8689 - Memory leak in HttpWebRequest / HttpWebResponse when using a WebProxy
- #8766 - Starting process with empty ProcessStartInfo.Environment incorrectly inherits all variables
- #8848 - Error when debugging
- #9028 - Mono to SQL Server using integrated security no longer works on iOS
- #9089 - WaitHandle.WaitAny returns invalid result
- #9532 - Mono.Unix.Native.Syscall.sys_strerror_r SEGFAULT on musl libc
- #9566 - flaky runtime.finalizer-exception.exe (Assertion at unwind.c:640, condition `cfa_reg != -1’ not met)
- #9581 - Update macOS minimal version
- #9839 - Behaviour difference between Mono and CoreCLR
- #9870 - iOS: 32-bit device unit test failure: [FAIL] FSharpTest.SprintfTest : Expected: True
- #9935 - tests/src/baseservices/threading/readerwriterlockslim/upgrader.cs CoreCLR acceptance-test fails
- #9941 - WASM: Use BrowserHttpMessageHandler when available
- #9943 - System.Reflection.Assembly.LoadFile should throw ArgumentException for relative path name
- #9947 - AOT images compiled with safepoints should be usable with MONO_THREADS_SUSPEND=preemptive
- #9973 - Update framework facades list used by loader
- #10000 - Type.IsSubclassOf Performance Regression
- #10031 - unhandled-exception-2.exe crashes crash reporting
- #10035 - BinaryReaderTest.ReadBytesException and BinaryReaderTest.ReadCharsException fail on FullAOT+LLVM after hybrid suspend change
- #10070 - recent string loading changes break big endian with mojibake
- #10143 - Process.GetProcessesByName Memory Leak, Not Disposing Filtered Process Objects
- #10144 - Generic with “unmanaged” constraint crashes runtime
- #10227 - ProductHeaderValue parser throws exception for empty values
- #10243 -
opt
andllc
missing from mono 2018-08 pkg - #10244 - [wasm] Make test.js use generated driver and bindings.
- #10303 - Latest mono on macOS broke Xamarin Studio 5 compatibility: Marshal.SizeOf reports type 0x01 not handled
- #10309 - Mono issuing SIGSEGV running C# Semantic Tests
- #10412 - Native crash when debugging with exception watchpoint
- #10441 - FullAOT LLVM Linux x64 one flaky failure.
- #10446 - [ WASM ]Build fail host error
- #10448 - [iOS] CalendarTest.Hijri and CalendarTest.UmAlQura fail
- #10467 - mono_thread_info_exit ignores exit_code and just passes 0 on.
- #10483 - iOS cannot save Entity models with Nullable Guid (Guid?) property types (among others) using EF Core 2.1.2.
- #10488 - HttpWebRequest throws an uncatchable task exception when processing requests simultaneously with timeout specified
- #10506 - Update CI build scripts to not hardcode -j4
- #10549 - Wrong characters in decimal number representation on s390x
- #10598 - Many scary “Your mono runtime and class libraries are out of sync” mono warnings when building for device
- #10603 - [wasm] Stop using mmap for loading assemblies
- #10620 - [wasm] Rename sdks WebAssembly framework libraries
- #10682 - [wasm] Build fails - ninja can not be found.
- #10802 - mono_jit_init on macOS 10.14 has graphics corruption due to mprotect invocation
- #10863 - Possible GC hang while building msbuild with mono/2018-08 and mono/master
- #11123 - Type.IsSubclassOf throws TypeLoadException
- #11138 - Hybrid suspend: mono_add_internal_call is broken
- #11146 - Unhandled exception at the end of MonoDevelop.UnitTesting.Tests test run
- #11202 - Mac installer does not always clear out old files
- #11214 - SDK ‘Microsoft.NET.Sdk.Razor’ not found
- #11303 -
ParameterInfo.[Raw]DefaultValue
returnsMissing.Value
for non-null default values ofDateTime?
anddecimal?
parameters - #11378 - [WASM AOT] Method returning a ValueType is not returning its value as a value
- #11441 - HttpClient requests not cancelled in Dispose()
- #11478 - [XA] [2018-10] Failure in PropertyInfoTests.GetValue_Invalid
- #11479 - Loading assembly generated using tlbimp.exe give error in mono runtime
- #11613 - AOT crash: error: * Assertion: should not be reached at ../../../../../mono/mini/mini-arm64-gsharedvt.c:119
- #11874 - watchOS: mini test failure in release mode: JitTests.Aot : System.Reflection.TargetInvocationException
- Bugzilla 43447 - SynchronizedCollection.Add throws an ArgumentOutOfRangeException
Contributors
Aleksey Kliger (λgeek), Alex Earl, Alexander Kyte, Alexander Köplinger, Alexis Christoforides, Alon Zakai, Ankit Jain, Bernhard Urban, Calvin Buckley, Egor Bogatov, Filip Navara, FrozenShade666, Jasonsjiang, Jay Krell, Jo Shields, Joe Groocock, Johan Lorensson, Jonathan Chambers, Jonathan Pryor, Jérémie Laval, Katelyn Gadd, Kenneth Pouncey, Ludovic Henry, Marek Habersack, Marek Safar, Martin Baulig, Matthew Leibowitz, Maxim Lipnin, Michael DeRoy, Miguel de Icaza, Neale Ferguson, Niklas Therning, Nikolay Sivov, Per Allansson, Rodrigo Kumpera, Rolf Bjarne Kvinge, Rémi Bourgarel, Steve Pfister, Vlad Brezae, Zoltan Varga