When we talk about portable .NET applications, it is important to understand the following portability concepts related to .NET development.
.NET CLR, CIL and JIT
The .NET CLR is a virtual machine, which is responsible for the execution of .NET programs. The running of a .NET program goes through a process known as just-in-time (JIT) compilation, which produces code in CIL (Common Intermediate Language) format. The CIL code gets translated to native CPU instructions by the CLR. This makes it possible to run CIL code across multiple devices and operating systems. So in its heart .NET is a portable development environment.
.NET Frameworks and Runtimes
The .NET Frameworks are sets of libraries, built upon a .NET CLR and written in a language that produces CLR instructions (in most cases C# or VB.NET). The .NET Frameworks are represent sets of libraries built around a specific runtime. For example the WinForms and WPF libraries share the .NET Windows runtime library. Silverlight is in-fact built around another runtime and the Silverlight libraries set is a completely different branch of the original .NET Framework, that is partially synchronized with it via the good old copy-paste method. MONO also implements its own versions of the .NET runtime that target other operating systems and devices.
Portable Class Libraries
Portable class libraries (PCL) make it possible to create an assembly that can be used by different .NET runtimes. To achieve this, PCL strip all functionality specific to a given runtime and leave only the functionality, which is available in all target platforms. NOV is implemented as a set of portable class libraries.
Presentation Layer
Because each of the inspected runtimes is developed for either a specific operating system or environment, the closer things get to the presentation layer, the differences in the specific .NET framework branches get bigger and bigger. This is due to factors like native dependencies (WinForms depends on Win32 APIs and GDI+, WPF depends on Win32 APIs and MilCore, specific MONO presentation layers depend on GTK, Mac, Android APIs etc), different development teams and many other. So at first glance it really looks impossible to develop cross platform and modern presentation layer with a single API, just because the .NET runtimes are slightly different and because the presentation layers developed for them have really nothing in common. Well that was true - with Nevron Open Vision however, this has changed forever and for good.