## ASP.NET Core features

1. complete redesign of the ASP.NET Framework called ASP.NET Core in **June 2016. - ver. 1.0, 1.1, 2.0, 2.1** 
1. open-source and cross-platform (Windows, Linux, and macOS)
1. for building cloud-based applications, such as web applications, Internet of Things (IoT) apps and even mobile back end
1. run on the .NET Core Framework as well as on the full .NET Framework
1. deployed either within the **cloud or on-premises**
1. consists of modular components
1. no longer based on  **System.Web.dll , instead, it uses NuGet packages -  to include only needed** (pay-for-what-you-use cloud consumer world)
1. classic .NET Framework: you must choose between **six application models** (WPF, Windows Forms, Web Forms, Web MVC, Web API, and Xamarin), which can be confusing and not very productive. ASP.NET Core 2.0 - **2 app models**, you can **share code between them, reuse more than 90%** of your code. Allows for **switching between app models**.   


## ASP.NET Core 2.0 features

1. **Microsoft.AspNet.Core.All  package** : contains all ASP.NET Core 2.0 features in a single library. It includes 
1. authentication, 
2. MVC, 
3. Razor, which contains an efficient language for creating your views. Tag Helpers enable server-side code to participate in creating and rendering HTML elements in Razor files.   
4. monitoring, 
5. Kestrel support... 

Or selectively add packages one by one but then you will miss several advantages.

2. **Runtime store** is an important new component in 2.0 - **compiled packages** -  key for improved performance - apps using Microsoft.AspNet.Core.All - do not need to be deployed with all dependent packages anymore.

You can build **HTTP services** with full support for **content negotiation** using custom and built-in **formatters** such as JSON or XML as well as RESTful services.

**Model binding** automatically maps data from HTTP requests to action method parameters and **model validation** automatically performs client and server side validation.

In terms of client-side development, ASP.NET Core 2.0 is designed to integrate seamlessly with a variety of client-side frameworks including AngularJS, KnockoutJS, and Bootstrap.

Additionally, it provides the following fundamental improvements:
1. ASP.NET MVC and Web API have been combined into a single framework
1. Modern client-side frameworks and development workflows
1. Environment-based configuration systemready for cloud hosting
1. Built-in dependency injection functionalities
1. New light-weight and modular HTTP request pipeline
1. Host the same application in IIS, self-host, Docker, Cloud and even in your own processes
1. Hosts multiple versions of an application or a component side-by-side
1. Ships entirely as NuGet packages
1. New tooling that simplifies modern web development
1. Simplified  **csproj  file**, making it easier to work with development environments other than Visual Studio (on Linux and macOS, for example)
1. **Program.cs**  class has been extended to fully automate 
    1. integration of Kestrel, 
    2. setting of the  ContentRootPath , 
    3. loading configuration files, 
    4. initializing logging middleware, 
    5. and other steps by only calling a single method
1. **Startup.cs**  has been simplified by moving logging and configuration into the WebHost builder initialization


## Cross-platform support
Ubuntu 14, 16, Linux Mint 17, 18, Debian 8, Fedora, CentOS 7.1 and Oracle 7.1, SUSE Enterprise Server 64 bits, OpenSuse 64 bits   

macOS 10.11, macOS 10.12    

Apache, IIS, Kestrel self-host, Nginx

Develop using Visual Studio 2017 (on Windows) or Visual Studio Code. Eg develop and test on Windows and then deploy your applications
to a Linux server for performance, stability or cost reduction reasons.  On Linux, you could use Visual Studio Code, VIM/VI, Sublime, or Emacs for example. 

## Microservices (Microservice architecture)
Structures app as a collection of loosely coupled services, which implement business capabilities. 
## Working with Docker and containers
## Performance and scalability
## Side-by-side deployments
## Technology restrictions
## When to choose ASP.NET Core 2.0
