ASP.NET Core 2.0 was released alongside Visual Studio 2017.3 and is ready for use, but its relationship with prior frameworks is often misunderstood and can be confusing.
Many people seem to think ASP.NET Core is simply the next version of ASP.NET MVC. However, it is so much more than that, it is a replacement and complete rewrite of ASP.NET.
This confusion is only compounded by the additional choice of platform targets: .NET Core, .NET Framework, or .NET Standard.
I have successfully upgraded many projects from ASP.NET MVC 5 and ASP.NET Core 1.x to ASP.NET Core 2.0 and believe it is now ready for use in production.
This post gives a brief history of ASP.NET, clarifies the relationship between ASP.NET Core and ASP.NET, describes how ASP.NET Core unifies ASP.NET MVC and ASP.NET Web API, and explores ASP.NET and ASP.NET Core platform compatibility.
A brief history of ASP.NET
ASP.NET was released way back in 2002 alongside .NET Framework 1.0 with ASP.NET Web Forms (ASPX) for web applications and ASP.NET Web Service (ASMX) for web services.
ASP.NET MVC was released in 2009 as an alternative to Web Forms. ASP.NET MVC provided a thinner abstraction over the web as opposed to Web Forms which tried to mimic traditional Windows application development.
ASP.NET Web API was released in 2012 with ASP.NET MVC 4 as a better way to create web APIs; it replaced a myriad of older approaches including WCF and ASMX.
ASP.NET Core was released in 2016 and is a complete rewrite of ASP.NET. ASP.NET Core is modular and cross-platform.
Web Frameworks and Extensions
There are frameworks and then there are frameworks that build atop those frameworks. Calling them all frameworks is confusing, so we will call them frameworks (red) and extensions (yellow) respectively.
ASP.NET is the original framework.
ASP.NET Web Forms, ASP.NET MVC, and ASP.NET Web API are all extensions that build atop the ASP.NET framework.
ASP.NET Core is a new framework. ASP.NET Core is to ASP.NET as .NET Core is to .NET Framework.
ASP.NET Core MVC and ASP.NET Core Razor Pages are both extensions that build atop the ASP.NET Core framework.
Note that Web Forms is not available on ASP.NET Core.
When reading about ASP.NET Core you'll encounter different terminology around the web. For example, I have seen ASP.NET Core and ASP.NET Core MVC used interchangeably.
This is understandable, as there are not yet the myriad of extensions to ASP.NET Core that there are to ASP.NET. In the early days of ASP.NET, ASP.NET was synonymous with Web Forms as newer extensions like MVC did not exist. These days, there is a similar relationship between ASP.NET Core and ASP.NET Core MVC as the original integrated extension to ASP.NET Core.
Unifying ASP.NET MVC and ASP.NET Web API
ASP.NET MVC and ASP.NET Web API are quite similar and it is common to need the functionality of both within one web application.
Initially, you needed separate projects for each, but One ASP.NET changed that and enabled Web Forms, MVC, and Web API to all live within one project.
ASP.NET Core goes further and unifies them completely. MVC controllers and Web API controllers are now identical.
Framework and Platform Compatibility
ASP.NET targets .NET Framework and only runs on Windows.
ASP.NET Core targets .NET Standard and can be used on any platform implementing .NET Standard including .NET Framework on Windows or .NET Core on Windows or Linux.
ASP.NET Core is a complete modular rewrite of ASP.NET that merges MVC and Web API into one unified framework.
ASP.NET Core can run on Windows or Linux and can target .NET Framework or .NET Core.