.NET Core Overview
In this post, Senior Application Development Manager, Sash Kavalaparambil introduces .NET Core and many of the features that make it a powerhouse for cross platform development scenarios.
It has been over 16 years since the first version of .NET framework has been released. In spite of its wide adoption among developer community, todays cloud first mobile first world demands lightweight, cross platform technologies for building applications. The .NET Core is the evolution of Microsoft’s .NET technology into a modular, cross platform, open source and cloud ready platform, which runs on Windows, Mac, Android, IoT and Linux. The lightweight .NET Core framework provides much faster performance over some of the competing technologies, notably Node.js and GO.
The purpose of .NET core is to provide a unified platform for all types of applications, which includes Windows, cross platform and mobile applications. .NET Standard Library enables this by providing shared base API’s, which every application model needs, and excluding any application model specific API’s.
There are similarities and differences between .NET Core and .NET platform. Both implements .NET Standard Library and supports ASP.Net Core and EF core. The .NET framework will continue to be the platform for developing applications for Windows. In fact, you can have .NET Framework and .NET Core code live harmoniously together in the same solution such as a WinForms application consumes services written on .NET Core.
The following list highlights the features of the .NET Core platform.
|Runs everywhere||Runs on Windows, Linux and MacOS|
|Completely Open source||Libraries, compiler, languages, and tools developed in the open in GitHub. Licensing model: Source (MIT), Binary (Microsoft EULA)|
|Modular deployment model||Released through NuGet in smaller feature-centric packages, rather than one large assembly, that contains most of the core functionality. Only need to use the modules required by the application.|
|Middleware pipeline is completely pluggable and replaceable||Dependency injection is built from base to framework.
Logging infrastructure is pluggable right from base, ie booting, to API level.
Messaging infrastructure allows you to use the built-in messaging or plugging in other open source solutions such as RabbitMQ
|Faster and Secure applications||Having a smaller app surface area enables tighter security and improved performance. Benchmarks performed by TechEmpower shows that .NET core performs much faster than Node.js and GO.|
Supported Application Models
Currently .NET Core supports the following application models including Console Applications, ASP.Net Core, Class libraries, Universal Windows Applications (UWA) and Xamarin Forms. This list will continue to grow in the future as Microsoft adds support for more application models
Command Line Interface: The .NET Core command-line interface (CLI) is a new foundational cross-platform tool for developing .NET Core applications. This foundational layer can be used to create higher-level tools and IDE’s. CLI provides the same functionality in all supported platforms to provide a uniform experience.
Visual Studio 2017: The .NET Core tools are integrated into Visual Studio 2017 for Windows and Mac versions. Visual Studio 2017 provides many built in templates for creating supported application models including ASP.Net Core, class libraries, UWA and console apps. ASP.Net core template also gives an option to select .NET Core framework 1.0 or 1.1. When you open a .NET Core project created with older version in Visual studio, (ie projects with project.json) it automatically detects the change and offers a one-way migration to newer .csproj based structure.
The .NET core provides a flexible deployments model.
Framework-dependent deployment (FDD) : In Framework-dependent deployment, only the application and third-party dependencies are installed. The application depends on a system-wide version of .NET Core to be present.
Self-contained deployment (SCD): In self-contained deployment, the .NET Core version used to build the application is also deployed along with the application and third party dependencies and can run side-by-side with other versions.
.NET Core supports container technologies and works well with Docker images. Three Docker image variants are readily available from DockerHub. The developer image is ideal for fast iterations through code changes and to debug the changes. Build image is meant to be used in continuous integration/ build environments including compiler and any other dependencies to optimize the binaries. Production image is a small image for fast deployment and startup time. Visual studio has integrated support for Docker where users can right click a project and add Docker support.
Guidance on .NET Core
The .NET Core is the future of Microsoft’s .NET platform and adoption of this technology can help you in creating cloud ready, cross platform applications. General guidance for new applications development is to use .NET Core, if the application model exists. For existing applications, .NET Portability Analyzer tool will come handy to determine the portability of assemblies to the target platform and will help with the go or no-go decision on migration.
- Documentation: http://docs.dot.net
- .NET Core: https://www.microsoft.com/net/core
- Introducing .NET Core: https://devblogs.microsoft.com/dotnet/introducing-net-core/
- .NET Standard Library: https://github.com/dotnet/standard
- .NET Core framework source code: https://github.com/dotnet/corefx/tree/master/src
- ASP.NET Core benchmarks: https://github.com/aspnet/benchmarks
- .NET Core Docker image: https://hub.docker.com/r/microsoft/dotnet/
Premier Support for Developers provides strategic technology guidance, critical support coverage, and a range of essential services to help teams optimize development lifecycles and improve software quality. Contact your Application Development Manager (ADM) or email us to learn more about what we can do for you..NET Core roadmap: https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/