Mono 1.2.4 Release, 2007

Release date: 15 May 2007

Mono 1.2.4 is an update to Mono 1.2.3 in the Mono 1.2 series, it is a bug fix release for all the supported components, but also includes updates on the 2.0 stack.

All of the changes since 1.2 are documented in the following release notes: 1.2.1, 1.2.2 and 1.2.3.

New in Mono 1.2.4

Some statistics:

  • 680 new methods implemented.
  • 290 stubs that used to throw NotImplemented exceptions have been implemented.
  • 43 methods flagged with “to-do” have been implemented.

Runtime: HandleRef

Before Mono 1.2.4, runtime support for HandleRef did not exist.

People used to get the expected results probably as a side effect of the code generated, but their unmanaged code could have received junk. People depending on HandleRef should depend on version 1.2.4 at least, if people are targetting versions prior to 1.2.4, they should rewrite their code to drop HandleRef.

Shared Memory

Support for disabling Mono’s requirement to use shared memory is back.

Set the MONO_DISABLE_SHM environment variable at runtime, or you can disable it completely at configure time by passing the –disable-shared-handles argument to configure [Dick Porter]

Notice that disabling the support for shared memory disables some features in Mono, in particular cross-process IPC systems.

ASP.NET, in the 2.0 road

Many improvements for Mono’s ASP.NET 2.0 implementation, it is mostly complete at this point, we are only missing support for WebParts on the framework side of things.

  • Support for preservation files (.compiled files to allow mapping hashed dynamic assembly names to canonic names).
  • Preliminary support for asynchronous pages [Igor Zelmanovich]
  • Improved support for App_Code and App_{Local,Global}Resources [Marek Habersack].
  • Improved application themes/skins support [Marek Habersack]
  • Support for setting page/control class properties declaratively from the Page/Control directive [Marek Habersack]
  • View state encryption support [Igor Zelmanovich]
  • Code generated from .aspx and .ascx files now uses split-class model [Marek Habersack]
  • Correct decryption of role ticket cookies [Mike Morano]
  • New formatting of ASP.NET error pages (XHTML compliant).
  • XHTML rendering compatibility fixes [Daniel Nauck]
  • Numerous VirtualPathUtility fixes [Igor Zelmanovich]
  • System.Configuration fixes for empty containers with the short tag endings (e.g. <system.web/>) - they no longer lock up the application
  • Implemented the CodeFileBaseClass directive [Marek Habersack]
  • Numerous data-bound controls fixes [Igor Zelmanovich]
  • Implementation of all browser capabilities [Igor Zelmanovich]
  • Support for meta:resourcekey attribute in Page/Control directives.
  • Local resources now work with master pages.
  • The dynamic binary directory is now cleaned up at the application startup (unless the MONO_ASPNET_NODELETE environment variable is present) [Marek Habersack].
  • Numerous SiteMap and friends fixes [Mike Morano, Igor Zelmanovich]
  • Support for custom errors [Marek Habersack]
  • Fixes to file watcher when using inotify support on Linux systems [Marek Habersack]

Support for the “Bin” directory [Marek Habersack]

ASP.NET Performance

Performance was trippled while serving ASP.NET 2.0 pages, a number of things were done:

A bottleneck in browser detection has been removed [Marek Habersack]

Server variables are now also loaded lazily and internal string comparisons always use the invariant culture [Vladimir Krasnov].

ASP.NET WebServices

Support for 2.0 WebService/WebMethods on interfaces as well as support for 2.0 validation [Konstantin Triger].

C#

Work to support C# 3.0 has started, this release includes:

C# 3.0 Extension methods implemented by Marek Safar.

Anonymous Method generic type inferencing by Marek Safar.

Lambda Expressions, implemented by Miguel de Icaza. It is currently missing generic method type inferencing (similar in spirit to anonymous method generic type inferencing).

Martin Baulig and Marek Safar fixed many of the compiler bugs reported so far.

Beta: Mono.DataConvert

We are shipping a new class: Mono.DataConvert that can be used for doing data conversion from native types into byte arrays and back, as well as providing little and big endian conversions in the process.

This class resolves the ambiguities and mistakes that the .NET Framework System.BitConverter has and we advocate that people use this over the System.BitConverter.

In addition to a variety of static methods, this API comes with a Pack() and Unpack methods that can do encoding and decoding using a list of instructions (inspired by Perl’s pack and unpack statements).

Documentation and examples are available here [Miguel de Icaza].

Windows.Forms

Over 150 reported bugs fixed.

Delay control handle creation and do fewer layouts, boosting performance.

2.0 support: ToolStrip overflow, merging, shortcut keys, tooltips, new layouts.

2.0 support: Balloon tips in NotifyIcons [Everaldo Canuto]

2.0 support: Hundreds of new 2.0 methods implemented in various controls.

System.Drawing

Metafiles (WMF and EMF) are now supported by GDI+ and System.Drawing. Mono is now able to render images stored in metafile formats and play them back on a graphics context. Not all the metadata records types are supported, so you still need to test your software [Sebastien Pouliot].

libgdiplus has been updated to use Cairo 1.4.2 which offers improved performance [Sebastien Pouliot].

Libgdiplus symbols exports have been cleaned. This removes the possible mixup between gtk+/cairo and libgdiplus/cairo seen in recent distros [Sebastien Pouliot].

System.Drawing performance improvements where made for Pen (bad caching) and Color (lock removal) [Sebastien Pouliot].

Bitmap.[L|Unl]ockBits now works for all supported pixel formats [Sebastien Pouliot].

Unit tests do not expose architecture-specific issues anymore (e.g. endian issues on PPC and SPARC) [Sebastien Pouliot]

Many printing issues have been fixed in this release [Andreia Gaita].

ADO.NET

2.0 API updates (get full list from Nagappan).

Support for output parameters in stored procedures [Andreia Gaita].

New Platform Configuration

Solaris/amd64 is now supported in Mono.

Visual Basic.NET

Fixes to enable VB.NET-based application to work with ASP.NET [Rolf Bjarne].

VBNC now supports the My namespace [Rolf Bjarne].

Security and Cryptography

Path.GetTempFileName will now return a file with 600 permissions, this is similar to new implementations of mkstemp.

Fixed HMACSHA384 and HMACSHA512 to use a 128 bits block size. The workaround is similar to MS one at http://blogs.msdn.com/shawnfa/archive/2007/01/31/please-do-not-use-the-net-2-0-hmacsha512-and-hmacsha384-classes.aspx [Sebastien Pouliot]

Signcode tool now support password-protected PVK files [Sebastien Pouliot]

CryptoStream.Write is now closer to MS behaviour and requires less memory allocations [Sebastien Pouliot]

Fixed endian issue in RIPEMD160 [Sebastien Pouliot]

New Tool

installvst is a tool that you can use to install VisualStudio source packages (e.g. starter kits) that use the .vstemplate files to define their installation layout.

You can use this to install the Starter Kits from http://asp.net.

System.Core

Many updates to the System.Linq, System.Linq.Expressions APIs from the 3.5 preview [Antonello Provenzano, Marek Safar].

Sqlite bindings

In addition to the old Mono.Data.SqliteClient, we are now also shipping a new Sqlite binding Mono.Data.Sqlite. Mono.Data.Sqlite is Robert Simpson’s Sqlite binding for .NET adapted to ship with the Mono framework.

This binding is better maintained than our old version. Developers are encouraged to migrate to this new API but keep in mind that this provider will only work with Sqlite3, it will not work with Sqlite2.

If you had your databases running with Sqlite2, and wanted to upgrade to the new API (which requires Sqlite3), you would have to dump and reload the databases.

The new assembly entirely separates the 1.x and 2.0 codebases which affects the users of the 2.0 profile because of API changes required to match the ADO.NET 2.0 standard. The 1.x profile is untouched (except for removing 2.0 fragments from it).

In order to allow the developers to adjust their applications to the new 2.0 API, the new assembly is named Mono.Data.Sqlite. The old assembly is being provided under its original name with no changes to the code. Developers using the 2.0 Mono profile are encouraged to switch their applications to the new module.

COM

COM Interop now supports COM Callable Wrappers (CCWs), meaning that managed objects can be marshalled to unmanaged code as COM objects. [Jonathan Chambers]

Sockets

Many of the new 2.0 socket methods are now available in Mono [Dick Porter].

Contributors

Contributors to this release include, but are not limited to:

Alois Blaka, Antonello Provenzano, Cedric Vivier, Daniel Nauck, dban@dako.ro, David Mitchell, Dick Porter, Duncan Mak, Everaldo Canuto, Eyal Alaluf, Frederik Carlier, Geoff Norton, George Giolfan, Gert Driesen, Gonzalo Paniagua Javier, Horst Reiterer, Igor Zelmanovich, Ivan N. Zlatev, Jackson Harper, Jb Evain, Jeffrey Stedfast, Jensen Somers, Joel Reed, Jonathan Chambers, Jonathan Pobst, Joshua Tauberer, Juan Cristóbal Olivares, Juraj Skripsky, Kevin Reay, Konstantin Triger, Leszek Ciesielski, Lluis Sanchez Gual, Marek Habersack, Marek Safar, Marek Sieradzki, Mark Mason, Martin Baulig, Massimiliano Mantione, Miguel de Icaza, Mike Kestner, Mike Morano, Nagappan A, Neale Ferguson, Nidhi Rawal, Olivier Dufour, Paolo Molaro, Pedro Martínez Juliá, Pekka J Enberg, Peter Dettman, Priit Laes, Radek Doulik, Raja R Harinath, Robert Jordan, Roei Erez, Rolf Bjarne Kvinge, Sebastien Pouliot, Stefan Noack, Thomas Wiest, Tor Lillqvist, Vladimir Krasnov, Wade Berrier, Yonik Kalin and Zoltan Varga.

If your name is missing from the list (the list is generated with a bunch of imperfect shell scripts over the git logs), please contact miguel@ximian.com.

Installing Mono 1.2.4

./configure --prefix=/devel

Binary Packages and Source Code Downloads:

Source code and pre-compiled packages for SUSE, SLES, Fedora Core 3, 4, Solaris, RHEL, MacOS and Windows in a variety of platforms available from our web site from the download section.

Quick source code installation:

If we have no packages for your platform, installing from source code is very simple.

mono:

tar xzf mono-1.2.4.tar.gz
cd mono-1.2.4
./configure
make
make install

Then compile libgdiplus:

tar xzf libgdiplus-1.2.4.tar.gz
cd libgdiplus-1.2.4
./configure
make
make install