What is this .NET Core thing anyway?

by Rob Richardson



About Me

Rob Richardson is a software craftsman building web properties in ASP.NET and Node, Angular and React. He's a frequent speaker at conferences, user groups, and community events, and a diligent teacher and student of high quality software development. You can find this and other talks on his blog at https://robrich.org/presentations and follow him on twitter at @rob_rich.

.NET Core

.NET Core Features

  • Single compile works cross platform
  • Open source
  • Lighter weight
  • Remove legacy baggage
  • Small NuGet packages
  • Command-line tools
  • bin-deployable framework
  • Dependency Injection is baked in

.NET Core: didn't make the cut

  • In-memory compiling
  • project.json
  • Write project file yourself
  • Remove web.config

All these were or will soon be reversed

.NET Standard

.NET Classic

Source: http://andrewlock.net/understanding-net-core-netstandard-and-asp-net-core/

Portable Class Libraries

Source: http://andrewlock.net/understanding-net-core-netstandard-and-asp-net-core/

Portable Class Libraries

Each runtime is a fork

I must pre-select the runtimes I want

New runtime? I must recompile

.NET Standard

Source: http://andrewlock.net/understanding-net-core-netstandard-and-asp-net-core/

.NET Standard

Target Platform Name Alias
.NET Platform Standard netstandard 1.0 1.1 1.2 1.3 1.4 1.5 2.0
.NET Core netcoreapp 1.0 vNext
.NET Framework net 4.5 4.5.1 4.6 4.6.1 4.6.2 4.6.1
Xamarin.iOS xamarinios vNext
Xamarin.Android monoandroid vNext
Universal Windows Platform uap 10.0 vNext
Windows win 8.0 8.1
Windows Phone wpa 8.1
Windows Phone Silverlight wp 8.0

Sources: http://andrewlock.net/understanding-net-core-netstandard-and-asp-net-core/
APIs: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

.NET Standard

An evolution of PCL

Identifies a common feature set
for this version of .NET
in all environments


Detail: http://andrewlock.net/understanding-net-core-netstandard-and-asp-net-core/

Analogy (pseudocode): https://gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7

.NET Core App

.NET Standard .NET Core App
Abstract API Implementation for
Windows, Mac, and Linux
"dependencies": {
  "NETStandard.Library": "1.6.0"
"dependencies": {
  "Microsoft.NETCore.App": {
    "version": "1.0.1",
    "type": "platform"




Port of MVC onto .NET Core

All the features you know and love

  • Controllers
  • Razor
  • Action filters
  • Web API

New ASP.NET Features

  • Built on OWIN
  • Self-hosted
    or reverse-proxied from IIS
  • Web API rolled in
  • Tag Helpers
  • Bower and NPM

New features from .NET Core:

  • Cross-platform
  • Nano server
  • Fast startup
  • bin deployable framework

Not ported

  • Web Forms
  • SignalR (coming soon)

ASP.NET Core Demo

Entity Framework Core

New Entity Framework Features

  • Much better defaults
  • Supports much more databases
  • ... including non-relational data stores
  • Entity Framework Migrations

Not ported

  • edmx
  • Designer

.NET Core Data

... or bring your own data story through NuGet

.NET Core

Not ported

  • Web Forms
  • SignalR (coming soon)
  • GDI+ (System.Drawing)
  • Control libraries?
  • Other dependencies?

Can I move to .NET Core?

  • Do I need cross-platform or nano server?
  • Are all my dependencies ported?
  • Am I ok with the pace of bleeding edge?
  • Do I want to go fast?

Can I move to .NET Core?

Dependency checker: icanhasdot.net

Portability Analyzer: https://github.com/Microsoft/dotnet-apiport/blob/master/docs/VSExtension/README.md


Why are there less overloads?

The goal was a very small .net framework, so redundant overloads were removed

Which NuGet package do I load to get ...?

Class / Namespace to NuGet Package search: packagesearch.azurewebsites.net

What else should I worry about?

.NET Rocks 1335 Migrating to .NET Core with Matt Watson