Introduction to .NET Core

What is .NET Core?

.NET Core is a general purpose development platform maintained by Microsoft and the .NET community on GitHub. It is cross-platform, supporting Windows, macOS and Linux, and can be used in device, cloud, and embedded/IoT scenarios.

The following characteristics best define .NET Core:

Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide.

Cross-platform: Runs on Windows, macOS and Linux; can be ported to other OSes. The supported Operating Systems (OS), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.

Command-line tools: All product scenarios can be exercised at the command-line.

Basically, Microsoft built a version of .NET to allow developers to write cross-platform and cloud-optimized applications.

First, .NET is cross-platform. It runs on Windows, macOS and Linux, which allows the developer to share and run the exact same code between machines running different operating systems, with no changes in code and minimum or no changes in the deveopment process.
(Watch out for OS specific APIs!)

But the true innovation in .NET came with the modularization in design and architecture.
The compiler (Roslyn) and the runtime (CoreCLR) are separate components that allow you to use different implementations (or even write your own).

Every library comes as a NuGet package, so when you start a new project, you don’t have any libraries, but a project file (currently a .json, in the future a .csproj to maintain consistency with all .NET projects) and a Program.cs. As you develop your app, you add libraries as you need them, allowing you to minimize the size of your application.

.NET Core also allows you to have multiple versions installed at the same time without having apps / parts of the OS breaking when you update or install a newer version of the framework, and will even allow you to ship the framework / parts of the framework with the application (since the footprint of the framework si small enough).

So right now, using C# and .NET you can build almost any type of application and target multiple frameworks.

.NET Standard – One library to rule them all

The .NET Standard Library is a formal specification of .NET APIs that are intended to be available on all .NET runtimes. The motivation behind the Standard Library is establishing greater uniformity in the .NET ecosystem. ECMA 335 continues to establish uniformity for .NET runtime behavior, but there is no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

The .NET Standard Library enables the following key scenarios:

Defines uniform set of BCL APIs for all .NET platforms to implement, independent of workload.

Enables developers to produce portable libraries that are usable across .NET runtimes, using this same set of APIs.

Reduces and hopefully eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

The goal of .NET Standard is to have a single, unified set of libraries that you target when building an application, regardless of the type – console, web or mobile – you simply target .NET Standard and you are guaranteed that libraries there will work when shared across all platforms.

This is the part of the framework most of the work will take place in the future and you can follow the progress or contribute in this GitHub repository.

Tools

Historically, .NET developers didn’t have to (or couldn’t) use the command line so often. Visual Studio took care of most processes involved in building and running the applications.

But with the open-source of .NET Core, all development efforts became CLI-first, so everything involved in building, compiling or running .NET Core applications can be done using the command line.

In fact, all these things were built for the command line first and then were wrapped in the multiple tools available.

Visual Studio Code is the cross-platform code editor for Linux, macOS and Windows. With VS Code you can build, debug and run web applications (ASP .NET Core, Node) or .NET Core console applications, with IntelliSense, code completion and Git integration.

Using OmniSharp you can add IntelliSense to any of the following code editors – Atom, Brackets, Emacs, Sublime or Vim.

Xamarin Studio is the IDE for macOS that lets you build cross-platform mobile applications for iOS, Android or macOS, and even web applications.

With Visual Studio Community you can build all types of applications on the .NET Framework, including Xamarin apps, Azure integration and source control support. For Windows, it is the best IDE for building .NET applications.

It is one of the most exciting times to be a .NET developer, being able to write code that runs across IoT devices, phones, tablets, laptops, desktops, holographic devices, servers or the cloud and share it across multiple operating systems, with familiar processes and tools.