Nevron Open Vision Documentation
Developing Portable .NET Applications
.NET Portability Concepts

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.

How does NOV achieve Portability?

Nevron Open Vision is a product that aims to run on all .NET runtimes, and provide a consistent, modern and powerful presentation layer for most of them. So what is Nevron Open Vision (NOV) and how does it achieve portability?

NOV is a collection of C# files, which form a closed ecosystem of features and services. Because NOV is a closed ecosystem (i.e. code-wise it depends only on itself), its assemblies are compiled as Portable Class Libraries, which you can use to target any .NET runtime you can think of from a single code base.

NOV aims to become the new face of the .NET Framework - on all runtimes and environments. To achieve that however it has to integrate inside existing presentation layers and/or operating systems. That is why NOV defines a set of services, which get a specific implementation for each runtime, presentation layer and/or operating system. This set of services defines the NOV abstract touch base, which is implemented by a specific NOV host (see Hosts and Integration Services for more info). NOV hosts are currently provided for WinForms, WPF, Silverlight, MonoMac and Xamarin.Mac presentation layers. We will soon provide an Universal Windows Platform (UWP) host. We are also investigating the possibility to provide hosts for other Xamarin presentation layers wrapping MONO - such as Xamarin for iOS and Xamarin for Android.

NOV aims to be a feature rich presentation layer, based on open standards and also a closed ecosystem, which provides its own implementation of mission critical modules. As NOV evolves, one of our main objectives is to minimize the host touch points, by implementing most of the mission critical modules ourselves.

NOV is not a framework only for portable application development. If you want to use specific NOV features or components in an already existing project, which runs on a specific runtime/presentation layer - feel free to do so. Whether you create complete portable applications or just embed NOV components into existing ones - NOV helps you get more out of your particular .NET environment - from a single API.

See Also
Send Feedback