OpenStack-SDK-DotNet/.NetFrameworkSupport

Summary
The OpenStack .NET SDK/API will support the .NET framework 4.0, and 4.5. Support for the 4.5 framework will be provided as a Portable Class Library (PCL) that will initially target Windows 8+ Store Apps and Windows Phone 8+ Apps (Profile 78). Through extensive research (including marketing, sales, support, and industry groups), and discussion it has become clear that the current customer base, and development landscape require support of .NET 4.0 for enterprise/large business consumers and 4.5/PCL support for mobile and cross platform based projects. Research and discussion also showed that support for .NET 3.5 is not a requirement, nor is support for older versions of Visual Studio (VS 2010 and older).

Solution and project file strategy and design
In order to accommodate the given requirements, a project for each supported .NET Framework solution will be added to the project. Each project will reference a common set of code, to maximize code reuse, and reduce redundancy. In cases where framework specific code is needed, additional code will be added (or removed) from the appropriate project. The usage of conditional compilation or "#if" should be minimal and used only as a last resort.

Async/Await and Threading support
Since support for .NET 3.5 and Visual Studio 2010 are not requirements, the code base can and will make use of the async and await keywords. Support for these keywords will be added to the .NET 4.0 project via adding the appropriate types required by the compiler to perform the language transformation for the keywords. The implementation for this has been opened-sourced by Microsoft under the Apache License (version 2.0), and a source dependency will be taken to insure that no residual dependencies are required.

HttpClient support
Currently a .NET 4.5 portable class library does not have native framework support for the HttpClient class and it's supporting infrastructure. This class and it's infrastructure is used through out the project to communicate with remote servers via the HTTP protocol. Support for this class and infrastructure in the 4.5 PCL project will be added via the Microsoft.Net.Http NuGet package that is publicly available.