Mono 3.10.0 发布,跨平台 .NET 运行环境

jopen 10年前

Mono是一个开源的跨平台的.NET运行环境,支持Unix, Windows, MacOS等操作系统。

Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334Ecma-335)的.NET工具,包括C#编译器和通用语言架构。与微软的.NET Framework共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台,例如:Playstation 3,Wii或XBox 360。Mono的标志是一个猴子格式的脸。

Mono现由Novell持有双重许可,这和Qt和Mozilla Application Suite的情况相似。Mono的C#编译器及其相关工具发布于GNU通用公共许可证(GPL)之下,其运行时库发布于GNU宽通用公共许可证(LGPL)之下,其类库发布于MIT许可证之下。这些均是开源协议因此Mono是一个开源软件。

微软开发了一个称为通用语言架构(Shared Source Common Language Infrastructure,Shared Source CLI;即今ECMA—通用语言架构)的可用于FreeBSD,Windows和Mac OS X的.NET实现版本。微软的共享源代码协议并不是开源软件协议,且可能对于社区来说也是不足够的(它明文禁止了对软件的商业用途)。另外,GNU也有一个.NET实现版本Portable.NET项目,该项目与Mono项目有着很多相同的目标。

Mono虚拟机包含一个实时编译引擎,该引擎可用于如下处理器:x86,SPARC,PowerPC,ARMS390(32位模式和64位模式),x86-64,IA-64和64位模式的SPARC。该虚拟机可以将代码编译为本机代码。


跨平台 .NET 运行环境 Mono 3.10.0 发布,该版本值得关注的有:

  • 实现了 System.IO.Compression.FileSystem.

  • Uri 实现了 .NET 4.5 行为,可转换成老的行为,只需要通过设置 System.Uri::s_IriParsing 静态属性为 false 即可

此外,该版本通过下面两个调整实现了性能的提升:

  • 核心元数据解析函数中移除无用的锁代码

  • 进行枚举时避免局部数组中缓存抖动

此外该版本还修复了很多 bug,详细列表请看:

Highlights

  • Implemented System.IO.Compression.FileSystem.
  • Uri now implements the .NET 4.5 behavior, it can be reverted to the old behavior in the same way by setting the System.Uri::s_IriParsing static field to false.

Performance

  • Remove unnecessary locking from core metadata parsing functions.
  • Avoid cache thrashing of locals array when looping over enumerator.

Known Issues

The OSX package packages an invalid libgdiplus library that affects users of System.Drawing that requires it to work.
This specially affects Xamarin.Mac users that fit the following criteria:

  • Uses Xamarin.Mac Classic (Unified is unaffected).
  • Uses the subsets of System.Drawing that use libgdiplus.dylib internally
    - System.Drawing.RectangleF, PointF, Colors are unaffected
    - System.Drawing.Bitmap, and font for example are affected

The symptom of the problemw is your application failing with: “System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus —> System.Exception: GdiplusStartup”

Bug fixes

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.