Notas de Liberação Mono 3.10.0

Release date: 04 Oct 2014

Mono 3.10.0 é uma versão de correções com algumas novas funcionalidades.

Pontos Altos

  • Implementada System.IO.Compression.FileSystem.
  • Uri agora implementa o comportamento do .NET 4.5, pode ser forçada a usar o comportamento antigo setando a variável de ambiente MONO_URI_IRIPARSING para false ou ainda o campo estático System.Uri::s_IriParsing para false. O código para fazer isso (que precisa ser por introspecção, pois o campo não é público) está abaixo:
FieldInfo iriParsingField = typeof (Uri).GetField ("s_IriParsing",
    BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
if (iriParsingField != null)
    iriParsingField.SetValue (null, false);

Performance

  • Removidos bloqueios (locks) desnecessários nas funções fundamentais de parseamento de metadados.
  • Evita invalidar o cache de matrizes locais ao iterar sobre um enumerador.

Problemas Conhecidos

O pacote para OSX contem uma versão inválida da biblioteca libgdiplus afetando usuários de classes em System.Drawing.
Isto afeta especialmente usuários do Xamarin.Mac que encaixam nos critérios:

  • Usam Xamarin.Mac Classic (Unified não é afetado).
  • Usam subconjuntos de System.Drawing que usam libgdiplus.dylib internamente
    - System.Drawing.RectangleF, PointF, Colors não são afetados
    - System.Drawing.Bitmap, e Font, por exemplo, são afetados

O sintoma do problema é a aplicação falhando com: “System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus —> System.Exception: GdiplusStartup”

Correções

Runtime

  • Fix support for unaligned offsets in the store_membase_imm opcodes. Fixes #23267.
  • Fix the lookup of nested types which have a namespace. Fixes #21653.
  • Increase some opcode sizes. Fixes #23026.
  • Always pass the imt arg to interface calls in gsharedvt methods. Fixes #22624.
  • Store the epilog length in MonoArchEHJitInfo instead of encoding it in jinfo->unwind_desc, since the latter can overflow for methods with large epilogs. Fixes #22685.
  • Add a mono_thread_detach_if_exiting () public api function which can be called by embedding code to detach the runtime if the code is running from a pthread dtor. Fixes #21164.
  • Fix yet another native types problem. Fixes #22053.
  • Fix the leaking of mach ports introduced by 98bbf8512aec0fa01b4426583280f6d231d22187. Fixes #22068.
  • Add support for constrained calls with vtype return types in gsharedvt code. Fixes #22109.
  • Fix the PLATFORM_GNU check so it works with gnueabi etc. as well. Fixes #21520.
  • Don’t make runtime invoke signatures generic. Fixes #21973.
  • Allow v8..v15 in unwind info on arm64. Fixes part of #21615.
  • Fix Process.PrivateMemorySize64 etc. on ios. Fixes #21882.
  • Fix enum->int casts in gsharedvt code. Fixes #21893.
  • Don’t assert when loading a generic methodspec with 0 arity. Fixes #19097.
  • Avoid asserting when a cattr cannot be loaded. Fixes #21653.
  • Avoid making generic calls from gsharedvt methods normally, go through the rgctx infrastructure instead. Fixes #21677.

Class Libraries

  • Fix Uri UserInfo parsing. Fixes 23246.
  • Update RequestMessage.RequestUri.AbsoluteUri after redirect. Fixes #22383.
  • Fixes XContainer attempt to create a XNode from a null value. Fixes #20151.
  • Changed XObject OnChanged and OnChanging to use Owner. When XObject.Owner is not a XElement XObject.Parent returns null and the owner would not be notified of changing and changed events. Fixes #18772.
  • Process XslLiteralElements with only child attributes as empty ones. Fixes #14751.
  • ‘finally’ protect ClientRuntimeChannel.Begin/EndProcess(). Fixes #22179.
  • WebClient.OpenWrite() must get the response on close. Fixes #10163.
  • Fix WebClient.UploadValuesTaskAsync(); Fixes #20359.
  • Improve System.Security.Claims. Fixes #22282.
  • Fixed serialization of XmlNode field with attribute XmlAnyElement. Fixes #3211.
  • Handle String::Format with escaped closing }. Fixes #22114
  • Add a missing check to TypeBuilder.CreateType (). Fixes #22059.
  • Xml Serialization of Base class w/o a parameterless constructor. Removed validation code that did not allowed serialization of base classes without a parameterless constructor. Fixes #6913.
  • Fixed XmlSerializer to handle attribute XmlSchemePrivider.IsAny. XmlSerializer no longer outputs a root element with class name when the class has the attribute XmlSchemeProvider and IsAny is true. Fixes #11916
  • Test that DeflateStream.Read does read an empty stream. Covers #19313.
  • Reseting all private key values to null is required because a new import may not overwrite existing values. Fixes #18482.
  • Handle quoted filename value. Fixes #21960.
  • Dispose XmlReader using correct value. Fixes #21771.

C# Compiler

  • Don’t use `1 naming for compiler generated second level and deeper nested types. Fixes #22893.
  • Extend missing type check to type lookups. Fixes #20933.
  • Fix copy and paste error in constraints checker. Fixes #22131.
  • Speed up nullable tokenizer. Fixes #20195.
  • Coalescing operator if the lhs of a null is a integer type that is larger than the integer type on the rhs. Fixes #22054.
  • Check for duplicate destructors. Fixes #21983.
  • Switch statement with constant block at first label. Fixes #21805.
  • Decimal constants modulo folding. Fixes #21743.
  • Update codegen for boolean loads. Fixes #21685.

MSBuild

  • Workaround for issues with CreateItem task where metadata are not generated due to up-to-data inputs. Fixes #23022.
  • Add KeepDuplicates etc. to 4.0 as internal. Fixes #20961.