Mono 5.14.0 Release Notes

Release date: 07 Aug 2018

Release History

Highlights

This is System.Windows.Forms major update release !

In Depth

Runtime

Better generic sharing

Generic sharing has been improved to handle more cases where constrained calls for example when using generic interface constraints now works in AOT mode and does not require JIT fallback.

Memory optimization for handles

Previously when a process required only a minimal number of handles fixed predefined size buffer was still allocated. This behaviour has been improved to allocate only necessary slots to reduce the amount of preallocated memory significantly in such situations.

LLVM Inlining improvements

Base on more benchmarking results we tweaked LLVM inlining rules to be more aggressive because LLVM can do a better job by generating more optimized code. This can noticeably improve microbenchmark results for a relevant C# code.

GC Handling of very large objects

Mono sgen GC didn’t scan properly very large objects due to a bug in our code. Usually, objects which are over 4GBs of memory could exhibit such behaviour which could potentially lead to random crashes for very large objects.

Class Libraries

Filip Navara has contributed significant improvements to Mono’s System.Windows.Forms implementation. Many quirks but also serious issues blocking his WinForms application running on Linux were merged making the implementation even more compatible with .NET.

Tools

C# compiler

The Mono C# compiler (mcs) C# 7.x support was extended to include support for following new language constructs.

  • digits separators
  • binary literals
  • stackalloc span conversion
  • conditional ref expression

F# Compiler

The bundled F# compiler has been updated to version 4.1.33.

NuGet

The bundled version of NuGet has been updated to 4.7.0. It supports repository signed packages. For detailed release notes check https://docs.microsoft.com/en-us/nuget/release-notes/nuget-4.7-rtm.

mkbundle

A new --mono-api-struct-path option was introduced to allow customization of runtime functions used for the embedding. This alows easier modification for example during the start-up. The default template can be found at https://github.com/mono/mono/blob/master/mcs/tools/mkbundle/bundle-mono-api.inc.

Resolved Issues

  • #6178 - Log profiler should provide startup time in stream header from same source as event timestamps
  • #6186 - Code coverage instrumentation logic should deal with inlining the same way as enter/leave instrumentation
  • #6187 - mkbundle Linux - program doesn’t run on system unless mono-core is installed
  • #6211 - Rare shutdown crash in profiler stress tests
  • #6266 - ArrayTypeMismatchException when using array of generic ICollection or IList
  • #6357 - Keepass crashes when editing an entry notes field in a specific way
  • #6579 - Type.GetInterface fails to find implemented interface when ignoreCase: true is used
  • #6666 - Invalid cast is not checked for nullable types
  • #6752 - System.TermInfoReader cannot handle new NCurses 6 TermInfo files
  • #6767 - Add missing APIs to System.Data
  • #6788 - nuget restore fails to parse valid json from nuget.org with mono/master
  • #6801 - Self-hosted HttpListener gets empty file collection and input stream for multipart PUT or POST requests
  • #6812 - MonoProfilerCoverageData::column is equal 0
  • #6848 - netstandard facade dlls have different public key tokens
  • #6940 - DNS lookup of IPv6-only hosts fails
  • #6948 - [XI]WatchOS apps fail to build with error “Undefined symbols for architecture armv7k” using XI with mono-2017-12 support
  • #6998 - Runtime assert in System.Runtime.Remoting
  • #6999 - test_0_time_drift - mono/tests failure
  • #7016 - Hybrid AOT is not working for some generic methods
  • #7085 - Hybrid AOT breaks setting thread UI culture
  • #7086 - Hybrid AOT throws invalid cast exception on dictionaries indexed with enum
  • #7093 - Regression in Array interface conversions
  • #7095 - Assertion at class-accessors.c:31, condition `mono_class_is_ginst (klass)’ not met
  • #7134 - NullReferenceException while processing concurrent requests with a WCF app
  • #7137 - Step in crashes debugger
  • #7145 - [XI] RuntimeFeatureTest.NoNewFeaturesAdded failure in mscorlib tests
  • #7184 - MSBuild always recompiles project if it has a resx with a windows path.
  • #7199 - finalizer-abort.exe
  • #7200 - Problem building on Arch linux
  • #7240 - dim-sharedgenerics.exe fails with LLVM
  • #7262 - .config with dllmap not working with app domains with shadow copying enabled
  • #7289 - Creating EnumMirror fails in a multi-domain context.
  • #7328 - suggest recursive self-calls do not create trampoline
  • #7338 - Finalizer crashes because of FileSystemWatcher Dispose exception in FileSystemWatcher_mobile.cs
  • #7356 - Memory leak in HttpWebRequest / HttpWebResponse
  • #7364 - watchOS/LLVM crashes at launch on device
  • #7378 - WeakAttribute causes all fields within a class to become weak
  • #7389 - System.CodeDom.Compiler.CodeDomConfigurationHandler throws on initialization
  • #7408 - No longer builds with CentOS 6 (GCC 4.4.7)
  • #7432 - gcsuppressfinalize.exe CoreCLR test started failing after upgrade to Debian 9
  • #7449 - PInvoke to function that takes a struct with an array of double gets incorrect results on Android
  • #7460 - w32handles require much memory when the minimum required is much lower
  • #7535 - [llvm/bitcode] Crash in mono_class_has_failure (class.c:10037)
  • #7536 - Missing Facades from net_4_x that are in 4.7.1.
  • #7537 - new object [int.MaxValue] crashes runtime instead of OOM
  • #7565 - Generic symbol names exported from libmono
  • #7568 - Intermittent failures on bug-80307.exe and other tests using FileSystemWatcher
  • #7610 - Add System.Memory facade
  • #7613 - mprof-report can’t read v13 file that Mono.Profiler.Log can
  • #7620 - DrawToBitmap in Control.cs does not work
  • #7624 - Strict loader still loads incorrect assembly
  • #7637 - iOS release build: “Could not AOT the assembly” -> “p - buf < buf_size not met”
  • #7655 - Memory leak in file operations in mono 5.10
  • #7657 - Method is inaccessible from method in nested classes with inheritance.
  • #7661 - Suppress the degraded allocation warning for the WebAssembly target
  • #7685 - Assert ainfo->cinfo->stack_usage % MONO_ARCH_FRAME_ALIGNMENT == 0
  • #7696 - LINQ bug (ConcatNIterator.ToArray()?)
  • #7729 - [mcs] fails to compile code with Tuple
  • #7786 - “mono/metadata/threads.c:3016, condition `internal’ not met” under certain conditions with the soft debugger attached
  • #7792 - Failure to AOT compile due to condition `load_opcode != OP_LOADV_MEMBASE’ not met
  • #7805 - F# build is broken due to new String.StartsWith overload
  • #7822 - Failing to serialize ConcurrentDictionary with BinaryFormatter
  • #7828 - Invalid instruction generated by regex runtime when using dapper
  • #7860 - illinkanalyzer isn’t whitelisted in the macOS package
  • #7864 - [wasm] Don’t fail when TaskCreationOptions.LongRunning is used
  • #7903 - Mono VS solution has wrong all projects in all profiles used
  • #7920 - build broken with –enable-minimal=soft_debug
  • #8089 - Add System.Drawing.Common facade for Xamarin profiles
  • #8143 - CEE_STELEM for single token fails in wasm interp mode
  • #8267 - TimeZoneInfo.Local Id and DisplayName are always: Local
  • #8310 - FSharp build is broken due to new Path.GetFileName() overload
  • #8311 - bug-82022.exe fails in LLVM JIT
  • #8409 - FullAOT test failures/crashes on arm64,armel or armhf
  • #8417 - Redirecting process output when Console.SetOut set gives strange output
  • #8698 - csharp REPL can’t load pkg-config references interactively
  • Bugzilla 10087 - Process exit can be blocked if the AppDomain.ProcessExit event hangs
  • Bugzilla 11771 - IsolatedStorageFile.GetFileNames() throws exception w/ nested dirs
  • Bugzilla 12850 - FtpWebRequest does not handle remote paths properly
  • Bugzilla 18941 - Calling Marshal.SizeOf() with an Empty struct using Sequential or Explicit returns 0
  • Bugzilla 19038 - Quitting XS caused MainStoryboard.Storyboard to convert to IB file
  • Bugzilla 19436 - [eglib] GMarkup XML parser can’t handle hyphens underscores and periods in element names.
  • Bugzilla 25224 - stack overflow after printfn something
  • Bugzilla 25444 - WCF method with UriTemplate annotation fails with InvalidOperationException
  • Bugzilla 33208 - System.Reflection.Module.ResolveMember() returning inconsistent results when querying dynamic assemblies
  • Bugzilla 46473 - Error: The object with ID N implements the IObjectReference interface for which all dependencies cannot be resolved. The likely cause is two instances of IObjectReference that have a mutual dependency on each other
  • Bugzilla 53272 - Unhandled Exception System.Collections.Generic.KeyNotFoundException in ikdasm
  • 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 59400 - Wrong interface method is called (two interfaces, covariance)
  • Bugzilla 59779 - HttpClient, when using GZIP, hangs while sending multiple requests in parallel.
  • Bugzilla 60065 - Make exception marshaling work with system mono
  • Bugzilla 60088 - Assertion at ../../../../external/mono/mono/mini/debugger-agent.c:4765, condition `array->len == 1’ not met
  • Bugzilla 60843 - Type 0x15 not handled in custom attr value decoding

Contributors

Aleksey Kliger, Alex Rønne Petersen, Alexander Kyte, Alexander Köplinger, Alexis Christoforides, Ankit Jain, Austin Wise, Ben Lubar, Bernhard Urban, Brian Luczkiewicz, Brian Raderman, Calvin, Calvin Buckley, Don Syme, Egor Bogatov, Filip Navara, Hugh Bellamy, Jason Imison, Jay Krell, Jiri Volejnik, Jo Shields, Johan Lorensson, Jonathan Chambers, Jonathan Pryor, Joshua Peterson, Kai Ruhnau, Katelyn Gadd, Konstantin Khitrykh, Ludovic Henry, Manuel de la Pena, Marek Safar, Marius Ungureanu, Martin Baulig, Michael DeRoy, Miguel de Icaza, Neale Ferguson, Niklas Therning, Paul Fertser, PiotrCW, Radek Doulik, Rodrigo Kumpera, Rolf Bjarne Kvinge, Sebastien Lebreton, Thomas Frohwein, Tychshenko Dmitriy, Vlad Brezae, Yauheni Pakala, Zoltan Varga, brianradunity, davidlsharp1, hgy59, pascalhaakmat