The .NET Compact Framework
As many developers are by now aware, and continue to learn through InformIT's .NET Reference Guide, the Microsoft Windows .NET Framework provides an innovative runtime engine (the Common Language Runtime), coupled with a powerful set of class libraries that make development on the Windows platform both productive and elegant. Among the many benefits of writing managed code in Visual Studio .NET are its support for a variety of languages, including Visual Basic, C#, C++, Java, and a host of other languages from both other vendors and academia.
And now, a year after the initial release, Microsoft has added to the .NET Framework and Visual Studio .NET by releasing the .NET Compact Framework and Smart Device Projects (SDP) as a part of Visual Studio .NET 2003. In this article, I briefly overview these two facets of Microsoft's support for building applications on smart devices.
Compact Framework Defined
I'll begin by providing an overview of the Compact Framework by addressing its goals, followed by an overview of the execution engine and class libraries.
Briefly, the Compact Framework was designed to fulfill four primary goals:
Portable subset of the Windows .NET Framework targeting multiple platforms. The Compact Framework was designed as a functional subset of the desktop Framework to target smart devices, including the Pocket PC 2000 and 2002, and devices running Windows CE .NET 4.1 and higher. The Compact Framework is not a simple port of the desktop version, however, but a complete rewrite designed to execute managed code on multiple CPU architectures and operating systems. It also includes compilers for VB and C#.
Leverage for VS .NET. The Compact Framework builds on the success of VS .NET as a highly productive development environment by providing project templates, an emulator, a debugger, and device integration for building mobile applications. Together, this is referred to as Smart Device Projects (SDP).
True emulation. To develop first-class mobile applications, developers need to be assured that the code they write will execute on the device. To support this goal, SDP includes both Pocket PC and Windows CE .NET emulators that execute exactly the same execution engine and class libraries as those installed on the device.
Support for enabling Web Services on devices. XML Web Services allows platform-independent access to information. Mobile devices are therefore a key part of the Web Services ecosystem, and consuming them from smart devices is made easy through the Compact Framework.
As mentioned, the Compact Framework includes an execution engine analogous to the Common Language Runtime in the desktop Framework that was written from the ground up to support smart device applications. This engine is composed of a variety of features, including a class loader, a type checker, a JIT compiler, thread support, exception handling, and a garbage collector. The execution engine itself is layered on top of the Platform Adaptation Layer (PAL) and Native Support Libraries (NSL). The PAL contains a variety of subsystems that expose functionality of the underlying operating system and hardware to the execution engine through a consistent set of APIs. This allows the Compact Framework to be easily ported to various hardware platforms by OEMs who provide platform-specific PALs. The NSLs are lower-level services that level the playing field for operating systems by supporting features that the execution engine requires but that might not be present. Examples include file-system operations and window and heap management.
The second part of the Compact Framework is the set of class libraries that developers access when writing applications. This is where developers see the biggest difference between developing for the desktop and developing for mobile devices. Because of the resource constraints of smart devices, the Compact Framework class libraries are necessarily a subset of those found on the desktop. As a result, they consist of approximately 1,700 of the 6,000 types (25%) found in the desktop Framework. Some of the core functionality missing from the Compact Framework includes the following:
Server-side APIs, such as ASP.NET, Enterprise Services, MSMQ, and WMI support
COM Interop
OleDb and ODBC .NET data providers
Generic serialization
Asynchronous delegates
Application configuration files
.NET Remoting
Printing
XPath/XSLT
Multimodule assemblies
In addition, developers will discover that where in the desktop Framework there might be several ways to accomplish a specific task, in the Compact Framework there might only be one. Also, many of the additional overloaded method signatures have been removed. However, the Compact Framework includes a couple of namespaces not found in the desktop Framework, including Microsoft.WindowsCE.Forms, to deal with input on smart devices, and System.Data.SqlServerCe, to program against Microsoft SQL Server 2000 Windows CE Edition 2.0 databases (which ships with VS .NET 2003, by the way).