INTRO TO .NET CORE
.NET CORE, ASP.NET CORE, NETSTANDARD, RUNTIMES
AGENDA
• WHAT IS .NET CORE?
• WHAT IS ASP.NET CORE?
• WHAT IS NETSTANDARD?
• GETTING STARTED
WHAT IS .NET CORE?
WHAT IS .NET CORE?
A VERSION OF .NET THAT:
• IS X-PLATFORM
• FLEXIBLE DEPLOYMENT
• OSS
• COMMAND LINE FIRST TOOLING
• SMALLER THAN, BUT COMPATIBLE WITH FULL FRAMEWORK
WHAT IS .NET CORE?
WHAT ARE THE COMPONENTS?
UWP Apps | Console Apps | Web Apps
CoreFx (BCL)
Runtime Adaption Layer
.NET Native | CoreClr
WHAT IS .NET CORE?
WHAT ARE THE COMPONENTS?
UWP Apps | Console Apps | Web Apps
CoreFx (BCL)
Runtime Adaption Layer
.NET Natvie CoreClr
X-PLATFORM
• WINDOWS
• DESKKTOP
• SERVER
• NANOSERVER
• LINUX
• RED HAT ENTERPRISE LINUX
• UBUNTU
• DEBIAN
• FEDORA
• CENTOS
• OPENSUSE
• MAC
FLEXIBLE DEPLOYMENT
NOT IN GAC
FLEXIBLE DEPLOYMENT
App 1
.NETCore v. X
App 2
.NETCore v. Y
App 3
.NETCore v. Z
FLEXIBLE DEPLOYMENT
App 1 App 2 App 3
.NET Core installed on server
SMALLER FOOTPRINT
…MAYBE:
• OPT-IN THROUGH NUGETS
• OR GO WITH .NETCOREAPP
• * SEE ASP.NET CORE INTRO :)
COMMAND LINE – WHY?
• AUTOMATION
• CROSS PLATFORM
• VISUAL STUDIO INDEPENDENCE
• WELL WORTH LEARNING
ps> dotnet
OSS / OWNERSHIP / SUPPORT
• EVERYTHING ON GITHUB
• MIT LICENSE (CORECLR, COREFX, CLI), APACHE (ROSLYN, ASP.NET)
• OWNED AND GOVERNED BY MICROSOFT
• ACCEPTS CONTRIBUTIONS
BONUS: PROJECT SYSTEM
MODERNIZED CSPROJ
• EDITOR / HUMAN FRIENDLY
• FRAMEWORK TARGETS
• APP MODEL
• NUGET DEPENDENCIES
• CAN BE USED WITH FULL FX
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/dev
<Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)M
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="***.cs" />
<EmbeddedResource Include="***.resx" />
</ItemGroup>
<ItemGroup Condition=" netcoreapp1.0">
<PackageReference Include="Microsoft.NETCore.App" Version="1.0.1
<PackageReference Include="Microsoft.NET.Test.Sdk“ Version="15.0
<PackageReference Include="xunit" Version="2.2.0-beta3-build3402
<PackageReference Include="xunit.runner.visualstudio" Version="2
</ItemGroup>
<Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />
</Project>
ASP.NET CORE
HIGHLIGHTS
• MODULARIZED
• FAAAAAASSSST
• PIPELINE, MIDDLEWARE
• UNIFIED MVC AND WEBAPI
• OSS
• .NET CORE BASED
• CROSS PLATFORM
• COMMAND LINE
• SIDE-BY-SIDE DEPLOY
• LESS DEPENDENT ON VISUAL STUDIO
ASP.NET TODAY
IIS
.NET BCL
ASP.NET
ASP.NET MVC ASP.NET Web API
HTTP
Modules
ASP.NET WebForms
HTTP
Handlers
Request
pipeline
HTTP
Context
et al.
Caching
Session
State
ASP.NET CORE – GUIDING PRINCIPLES
• NO DEPENDENCY ON SYSTEM.WEB
• THIS IS HUGE
• CROSS PLATFORM
• LOW FRICTION
(THIS IS MY INTERPRETATION)
ASP.NET – THINGS NOT IN CORE
IIS
.NET BCL
ASP.NET
ASP.NET MVC ASP.NET Web API
HTTP
Modules
ASP.NET WebForms
HTTP
Handlers
Request
pipeline
HTTP
Context
et al.
Caching
SessionS
tate
ASP.NET – AND THINGS CHANGED IN CORE
IIS
.NET BCL
ASP.NET
ASP.NET MVC ASP.NET Web API
HTTP
Modules
ASP.NET WebForms
HTTP
Handlers
Request
pipeline
HTTP
Context
Caching
SessionS
tate
ASP.NET CORE
Kestrel
.NET Core | Full Fx
ASP.NET Core
ASP.NET MVC
(WebApi, Razor)
FRONTEND
Bower GRUNT
DEPLOYMENT MODEL
Reverseproxy
IIS/NGINX
Kestrel
.NET Core
ASP.NET Core
ASP.NET MVC
(WebApi, Razor)
ASP.NET CORE: PIPELINE
• USE PIPES AND FILTERS
• A CONTEXT IS PIPED THROUGH MIDDLEWARE
25
ASP.NET CORE: PIPELINE
26
Kestrel Application
ASP.NET CORE: PIPELINE
27
Kestrel
Throttling
Middleware
OAuth
Middleware
Application
MIDDLEWARE
• MIDDLEWARE TRANSFORMS THE REQUEST AND RESPONSE
• TAKES A CONTEXT IN
• CAN CALL NEXT STEP IN PIPELINE
• OR NOT
• UNIFORM INTERFACE
• COMPOSABLE , REARRANGEABLE
28
MIDDLEWARE
• 2 TYPES
• OWIN
• ASPNET CORE
29
OWIN: MIDDLEWARE ECOSYSTEM
• SECURITY:
• OAUTH, TWITTER, FACEBOOK, GOOGLE, …
• CLAIMSTRANFORMATIONS
• REQUIRESSL
• SCOPEVALIDATION
• …
• WEB:
• ROUTING
• LIMITS
• SITEMAP
• STATICFILES
• MONITORING
• RAYGUN
• SERILOG
• …
30
.NET STANDARD
.NET STANDARD
“TO PROVIDE A MORE CONCRETE GUARANTEE OF BINARY PORTABILITY TO FUTURE .NET-CAPABLE
PLATFORMS WITH AN EASIER-TO-UNDERSTAND PLATFORM VERSIONING PLAN.”
.NET STANDARD VS PCL
• PCL STATES PLATFORMS
• PORTABLE-NET45+WP80+WIN8+WPA81
• .NET PLATFORM STANDARD
• LIBS STATE REQUIRED MINIMAL API LEVEL
• PLATFORMS STATED IMPLEMENTED API LEVEL
• NETSTANDARD1.3
• FORWARD COMPATIBILITY
.NET STANDARD
• CHOOSE API LEVEL
• COMPILE AGAINST REFENCE .DLLS
• RUN AGAINST TARGET DEPENDENT IMPLEMENTATIONS
34
GETTING STARTED
GETTING STARTED
• BOTTOM UP
• PORT LOWEST LEVEL LIBS TO .NET PLATFORM STANDARD 1.6
• PORT OWIN MIDDLEWARE AWAY FROM KATANA
• (USE LIBOWIN INSTEAD)
• BUILD SERVER => NUGET PACKAGES
GETTING STARTED
• FIND A LOW IMPACT SERVICE, USE IT TO DRIVE
• PROD ENVIRONMENT
• DEPLOYMENT PIPELINE
GETTING STARTED
• WHEN?
• .NET CORE AND ASP.NET CORE ARE 1.1 NOW
• TOOLING IS PREVIEW NOW
• Q2 2017:
• TOOLING RTM
• .NET CORE 2.0 (FASTER)
• .NETSTANDARD 2.0 (LOTS AND LOTS OF APIS)
• ASP.NET 1.2 (SIGNALR, FASTER, SECURITY)
GETTING STARTED
• FOLLOW ULTRA SHORT TUTORIAL HERE:
HTTPS://WWW.MICROSOFT.COM/NET/CORE#WINDOWSCMD
• MORE INFO HERE:
HTTPS://DOCS.MICROSOFT.COM/EN-US/DOTNET/ARTICLES/CORE/
• BUT YOU TO DIG DEEP … YOU STILL GO TO GITHUB
WRAP UP
WHY DO I CARE?
• DOTNET CLI AND CROSS PLATFORM:
• USE LINUX IN PRODUCTION
• BROADER POTENTIAL DEVELOPER CROWD
• DOTNET AS ENABLER FOR YOUR OWN TOOLING
• DOTNET AS ENABLER FOR 3RD PARTY / OSS TOOLING
WHY DO I CARE?
• MODULARIZED .NET
SMALLER FOOTPRINT ON DISK AND MEMORY (!)
FASTER DEVELOPMENT FROM MS ON SOME PARTS
SIDE-BY-SIDE ON DIFFERENT VERSIONS
WHY DO I CARE?
• MIDDLEWARE
 NICE MODULAR WAY OF WORKING
 SEPARATION OF INFRASTRUCTURE AND APPLICATION
• MORE OWIN
 BETTER OPPORTUNITY FOR .NET OSS
 OWIN MIDDLEWARE ECO SYSTEM WILL BLOSSOM
 NICE MODULAR WAY OF WORKING
WHY DO I CARE?
• MVC
 UNIFIES MVC AND WEBAPI PROPERLY
 MOVES CLOSER TO “MODERN” FRONTEND DEVELOPMENT

Intro to.net core 20170111

  • 1.
    INTRO TO .NETCORE .NET CORE, ASP.NET CORE, NETSTANDARD, RUNTIMES
  • 2.
    AGENDA • WHAT IS.NET CORE? • WHAT IS ASP.NET CORE? • WHAT IS NETSTANDARD? • GETTING STARTED
  • 3.
  • 4.
    WHAT IS .NETCORE? A VERSION OF .NET THAT: • IS X-PLATFORM • FLEXIBLE DEPLOYMENT • OSS • COMMAND LINE FIRST TOOLING • SMALLER THAN, BUT COMPATIBLE WITH FULL FRAMEWORK
  • 5.
    WHAT IS .NETCORE? WHAT ARE THE COMPONENTS? UWP Apps | Console Apps | Web Apps CoreFx (BCL) Runtime Adaption Layer .NET Native | CoreClr
  • 6.
    WHAT IS .NETCORE? WHAT ARE THE COMPONENTS? UWP Apps | Console Apps | Web Apps CoreFx (BCL) Runtime Adaption Layer .NET Natvie CoreClr
  • 7.
    X-PLATFORM • WINDOWS • DESKKTOP •SERVER • NANOSERVER • LINUX • RED HAT ENTERPRISE LINUX • UBUNTU • DEBIAN • FEDORA • CENTOS • OPENSUSE • MAC
  • 8.
  • 9.
    FLEXIBLE DEPLOYMENT App 1 .NETCorev. X App 2 .NETCore v. Y App 3 .NETCore v. Z
  • 10.
    FLEXIBLE DEPLOYMENT App 1App 2 App 3 .NET Core installed on server
  • 11.
    SMALLER FOOTPRINT …MAYBE: • OPT-INTHROUGH NUGETS • OR GO WITH .NETCOREAPP • * SEE ASP.NET CORE INTRO :)
  • 12.
    COMMAND LINE –WHY? • AUTOMATION • CROSS PLATFORM • VISUAL STUDIO INDEPENDENCE • WELL WORTH LEARNING
  • 13.
  • 14.
    OSS / OWNERSHIP/ SUPPORT • EVERYTHING ON GITHUB • MIT LICENSE (CORECLR, COREFX, CLI), APACHE (ROSLYN, ASP.NET) • OWNED AND GOVERNED BY MICROSOFT • ACCEPTS CONTRIBUTIONS
  • 15.
    BONUS: PROJECT SYSTEM MODERNIZEDCSPROJ • EDITOR / HUMAN FRIENDLY • FRAMEWORK TARGETS • APP MODEL • NUGET DEPENDENCIES • CAN BE USED WITH FULL FX <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/dev <Import Project="$(MSBuildExtensionsPath)$(MSBuildToolsVersion)M <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include="***.cs" /> <EmbeddedResource Include="***.resx" /> </ItemGroup> <ItemGroup Condition=" netcoreapp1.0"> <PackageReference Include="Microsoft.NETCore.App" Version="1.0.1 <PackageReference Include="Microsoft.NET.Test.Sdk“ Version="15.0 <PackageReference Include="xunit" Version="2.2.0-beta3-build3402 <PackageReference Include="xunit.runner.visualstudio" Version="2 </ItemGroup> <Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" /> </Project>
  • 16.
  • 17.
    HIGHLIGHTS • MODULARIZED • FAAAAAASSSST •PIPELINE, MIDDLEWARE • UNIFIED MVC AND WEBAPI • OSS • .NET CORE BASED • CROSS PLATFORM • COMMAND LINE • SIDE-BY-SIDE DEPLOY • LESS DEPENDENT ON VISUAL STUDIO
  • 18.
    ASP.NET TODAY IIS .NET BCL ASP.NET ASP.NETMVC ASP.NET Web API HTTP Modules ASP.NET WebForms HTTP Handlers Request pipeline HTTP Context et al. Caching Session State
  • 19.
    ASP.NET CORE –GUIDING PRINCIPLES • NO DEPENDENCY ON SYSTEM.WEB • THIS IS HUGE • CROSS PLATFORM • LOW FRICTION (THIS IS MY INTERPRETATION)
  • 20.
    ASP.NET – THINGSNOT IN CORE IIS .NET BCL ASP.NET ASP.NET MVC ASP.NET Web API HTTP Modules ASP.NET WebForms HTTP Handlers Request pipeline HTTP Context et al. Caching SessionS tate
  • 21.
    ASP.NET – ANDTHINGS CHANGED IN CORE IIS .NET BCL ASP.NET ASP.NET MVC ASP.NET Web API HTTP Modules ASP.NET WebForms HTTP Handlers Request pipeline HTTP Context Caching SessionS tate
  • 22.
    ASP.NET CORE Kestrel .NET Core| Full Fx ASP.NET Core ASP.NET MVC (WebApi, Razor)
  • 23.
  • 24.
  • 25.
    ASP.NET CORE: PIPELINE •USE PIPES AND FILTERS • A CONTEXT IS PIPED THROUGH MIDDLEWARE 25
  • 26.
  • 27.
  • 28.
    MIDDLEWARE • MIDDLEWARE TRANSFORMSTHE REQUEST AND RESPONSE • TAKES A CONTEXT IN • CAN CALL NEXT STEP IN PIPELINE • OR NOT • UNIFORM INTERFACE • COMPOSABLE , REARRANGEABLE 28
  • 29.
    MIDDLEWARE • 2 TYPES •OWIN • ASPNET CORE 29
  • 30.
    OWIN: MIDDLEWARE ECOSYSTEM •SECURITY: • OAUTH, TWITTER, FACEBOOK, GOOGLE, … • CLAIMSTRANFORMATIONS • REQUIRESSL • SCOPEVALIDATION • … • WEB: • ROUTING • LIMITS • SITEMAP • STATICFILES • MONITORING • RAYGUN • SERILOG • … 30
  • 31.
  • 32.
    .NET STANDARD “TO PROVIDEA MORE CONCRETE GUARANTEE OF BINARY PORTABILITY TO FUTURE .NET-CAPABLE PLATFORMS WITH AN EASIER-TO-UNDERSTAND PLATFORM VERSIONING PLAN.”
  • 33.
    .NET STANDARD VSPCL • PCL STATES PLATFORMS • PORTABLE-NET45+WP80+WIN8+WPA81 • .NET PLATFORM STANDARD • LIBS STATE REQUIRED MINIMAL API LEVEL • PLATFORMS STATED IMPLEMENTED API LEVEL • NETSTANDARD1.3 • FORWARD COMPATIBILITY
  • 34.
    .NET STANDARD • CHOOSEAPI LEVEL • COMPILE AGAINST REFENCE .DLLS • RUN AGAINST TARGET DEPENDENT IMPLEMENTATIONS 34
  • 36.
  • 37.
    GETTING STARTED • BOTTOMUP • PORT LOWEST LEVEL LIBS TO .NET PLATFORM STANDARD 1.6 • PORT OWIN MIDDLEWARE AWAY FROM KATANA • (USE LIBOWIN INSTEAD) • BUILD SERVER => NUGET PACKAGES
  • 38.
    GETTING STARTED • FINDA LOW IMPACT SERVICE, USE IT TO DRIVE • PROD ENVIRONMENT • DEPLOYMENT PIPELINE
  • 39.
    GETTING STARTED • WHEN? •.NET CORE AND ASP.NET CORE ARE 1.1 NOW • TOOLING IS PREVIEW NOW • Q2 2017: • TOOLING RTM • .NET CORE 2.0 (FASTER) • .NETSTANDARD 2.0 (LOTS AND LOTS OF APIS) • ASP.NET 1.2 (SIGNALR, FASTER, SECURITY)
  • 40.
    GETTING STARTED • FOLLOWULTRA SHORT TUTORIAL HERE: HTTPS://WWW.MICROSOFT.COM/NET/CORE#WINDOWSCMD • MORE INFO HERE: HTTPS://DOCS.MICROSOFT.COM/EN-US/DOTNET/ARTICLES/CORE/ • BUT YOU TO DIG DEEP … YOU STILL GO TO GITHUB
  • 41.
  • 42.
    WHY DO ICARE? • DOTNET CLI AND CROSS PLATFORM: • USE LINUX IN PRODUCTION • BROADER POTENTIAL DEVELOPER CROWD • DOTNET AS ENABLER FOR YOUR OWN TOOLING • DOTNET AS ENABLER FOR 3RD PARTY / OSS TOOLING
  • 43.
    WHY DO ICARE? • MODULARIZED .NET SMALLER FOOTPRINT ON DISK AND MEMORY (!) FASTER DEVELOPMENT FROM MS ON SOME PARTS SIDE-BY-SIDE ON DIFFERENT VERSIONS
  • 44.
    WHY DO ICARE? • MIDDLEWARE  NICE MODULAR WAY OF WORKING  SEPARATION OF INFRASTRUCTURE AND APPLICATION • MORE OWIN  BETTER OPPORTUNITY FOR .NET OSS  OWIN MIDDLEWARE ECO SYSTEM WILL BLOSSOM  NICE MODULAR WAY OF WORKING
  • 45.
    WHY DO ICARE? • MVC  UNIFIES MVC AND WEBAPI PROPERLY  MOVES CLOSER TO “MODERN” FRONTEND DEVELOPMENT