SlideShare a Scribd company logo
Tamir Dresher
@tamir_dresher
Demystifying the Core of .NET Core
1
@tamir_dresher
.NET Core
Finally
2
3
• Software architect, consultant and instructor
• Software Engineering Lecturer @ Ruppin Academic Center
• Author of Rx.NET in Action (Manning)
@tamir_dresher
http://www.TamirDresher.com.
About Me
3
@tamir_dresher
Agenda
• What is .NET Core
• .NET Core application Core components
• .NET Core Deployment Models
• Sharing code with .NET Standard
4
@tamir_dresher
What’s .NET Core
• A new implementation of .NET – modular, performant, seperated
• Cross Platform and Cross Devices
• Allows side-by-side execution
• Pay-for-play model – only “pay” for the part of CoreFx you use
• Open source:
• Github.com/dotnet
• https://github.com/dotnet/corefx
• https://github.com/dotnet/core
@tamir_dresher
Full .NET dev process - build
7
using System;
namespace testproj
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
.entrypoint
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [System.Console]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
csc
mscorlib.dll
reference
[app].dll/*.exe*.cs
@tamir_dresher
Full .NET dev process - execution
8
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
.entrypoint
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [System.Console]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
mscorlib.dll
load
[app].dll/*.exe
JIT
Loader
(Fusion)
GC
1. MSCorEE.dll
2. C:Windows
Microsoft.NET
Framework64
[version]
clr.dll
Load and run
CLR
...
@tamir_dresher
.NET Core
• .NET Core runtime – contains the CoreCLR. exist for each supported platform
• Location: C:Program FilesdotnetsharedMicrosoft.NETCore.App
• .NET Core SDK – tooling, templates, packages cache + the runtime
• Location: C:Program Filesdotnetsdk
• .NET Core CLI - command-line (CLI) tools, used for building .NET Core apps and
libraries
• https://www.microsoft.com/net/download/all
9
@tamir_dresher
Full .NET dev process - build
10
using System;
namespace testproj
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
.entrypoint
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [System.Console]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
dotnet build
Microsoft.NETCore.App
reference
[app].dll*.cs
[app].runtimeconfig.json [app].runtimeconfig.dev.json
[app].deps.json
@tamir_dresher
Full .NET dev process - execution
11
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
.entrypoint
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [System.Console]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
CoreFX
load
app.dll
JIT
Loader
(Fusion)
GC
dotnet-core
Runtime
Load and run
CoreCLR
...
> dotnet app.dll
[app].runtimeconfig.json [app].runtimeconfig.dev.json
[app].deps.json
configuration
reads
Demo
Creating a .NET Core console app and running in windows and linux
12
@tamir_dresher
.NET Core Build Artifacts
13
Dependencies Manifest
Runtime configuration
Optional configuration
@tamir_dresher
Changing runtime configuration
• In Full .NET Some configuration were only possible in app/machine.config (e.g.
changing the gc)
• app/machine.config is gone, user *.runtimeconfig.json instead
• Full list of configuration properties for CoreCLR
14
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
{
"runtimeOptions": {
...
},
"configProperties": {
"System.GC.Server": true
}
}
}
[project].csproj [project].runtimeconfig.json
@tamir_dresher
Controlling the runtime version
• The global.json file allows selection of the .NET Core tools version being used
through the sdk property.
• .NET Core CLI tools look for this file in the current working directory, or one of
its parent directories.
15
…
--- Resolving dotnet from working dir
Probing path [c:tempnewprojbinDebugnetcoreapp2.1global.json] for global.json
Probing path [c:tempnewprojbinDebugglobal.json] for global.json
Probing path [c:tempnewprojbinglobal.json] for global.json
Probing path [c:tempnewprojglobal.json] for global.json
Probing path [c:tempglobal.json] for global.json
Probing path [c:global.json] for global.json
Terminating global.json search at [c:]
…
> SET COREHOST_TRACE=1
> dotnet app.dll
{
"sdk": { "version": "1.0.0-preview2-003121" }
}
@tamir_dresher
Types of .NET Core applications deployments
• Requires .NET Core Runtime on the target system.
• Portable between installations of .NET Core.
• Executed by running the dotnet utility.
For example, dotnet app.dll
16
Framework
Dependent
Deployment
(FDD)
Self
Contained
Deployment
(SCD)
• .NET Core libraries and Runtime, are included with the
application
• Isolated from other .NET Core applications.
• Include A renamed version of the platform-specific .NET
Core host (such as app.exe on Windows) which then runs
the actual app.dll
@tamir_dresher
Self Contained Deployment (SCD)
17
1. Add the Runtime Identifiers (RID) to the csproj
• https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#windows-rids
2. Publish the project to the target platform
<PropertyGroup>
<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
</PropertyGroup>
> dotnet publish -c Release -r win10-x64
> dotnet publish -c Release -r osx.10.11-x64
@tamir_dresher
Self Contained Deployment (SCD)
18
1. Add the Runtime Identifiers (RID) to the csproj
• https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#windows-rids
2. Publish the project to the target platform
<PropertyGroup>
<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
</PropertyGroup>
> dotnet publish -c Release -r win10-x64
> dotnet publish -c Release -r osx.10.11-x64
Demo
Self-contained deployment
19
Creating reusable
libraries with .NET
Standard
20
@tamir_dresher
The problem
21
.NET Framework .NET Core Xamarin(Mono)
WinForms
WPF
ASP.NET
UWP
Console
ASP.NET
Core
iOS
OS X
Android
Framework Class
Library (FCL) CoreFX Mono Class Library
MyLib.dll
?
@tamir_dresher
Possible Solution – portable Class Library (PCL)
22
.NET 4.5
Silverlight
5
Windows
8
Profile47
@tamir_dresher
Possible Solution – portable Class Library (PCL)
23
.NET 4.5
Silverlight
5
Windows
8
Profile47
@tamir_dresher 24
@tamir_dresher 25
@tamir_dresher
A better solution - .NET Standard
.NET Framework .NET Core Xamarin(Mono)
WinForms
WPF
ASP.NET
UWP
Console
ASP.NET
Core
UWP
Console
ASP.NET
Core
Framework Class
Library (FCL) CoreFX Mono Class Library.NET Standard
@tamir_dresher
A better solution - .NET Standard
• A Spec (Standard) supported by all .NET implementations (Currently 2.0)
• .NET Standard is a set of APIs that all .NET platforms have to implement. This
unifies the .NET platforms and prevents future fragmentation.
• https://github.com/dotnet/standard
2.0
1.6
1.3
1.0
@tamir_dresher
How a .NET Standard works?
28
@tamir_dresher
.NET Standard Shim and Stubs – build time
30
@tamir_dresher
.NET Standard Shim and Stubs – build time
31
@tamir_dresher 32
%USERPROFILE%.nugetpackagesnetstandard.library2.0.1buildnetstandard2.0ref
.NET Standard Shim and Stubs – build time
@tamir_dresher
.NET Standard Shim and Stubs – runtime
33
@tamir_dresher
.NET Standard Shim and Stubs – runtime
34
[install dir]dotnetsharedMicrosoft.NETCore.App2.1.0-preview1-26216-03
@tamir_dresher
.NET Standard Shim and Stubs – runtime
35
[install dir]dotnetsharedMicrosoft.NETCore.App2.1.0-preview1-26216-03
@tamir_dresher
Summary
• What is .NET Core – cross platform .NET
• .NET Core application Core components
• SDK, Runtime
• Artifacts - *.runtimeconfig.{dev}.json, *. deps.json
• .NET Core Deployment Models – FDD, SCD
• Sharing code with .NET Standard
• PCL vs .NET Standard
• NETStandard.Library, netstandard.dll shim and stubs
36
Thank You
38
@tamir_dresher
http://www.TamirDresher.com.
@tamir_dresher
@tamir_dresher
The Runtime Package Store
• A local repository of pre-downloaded nuged packages
• The new GAC
• dotnet
store
x64
netcoreapp2.0
microsoft.applicationinsights
microsoft.aspnetcore
...
x86
netcoreapp2.0
microsoft.applicationinsights
microsoft.aspnetcore
...
40
@tamir_dresher
The Runtime Package Store
41
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="Moq" Version="4.7.63" />
</ItemGroup>
</Project>
dotnet store
--manifest packages.csproj
--runtime win 10-x64
--framework netcoreapp 2.0
--framework-version 2.0.0
<StoreArtifacts>
<Package Id="Newtonsoft.Json" Version="10.0.3" />
<Package Id="Castle.Core" Version="4.1.0" />
<Package Id="Moq" Version="4.7.63" />
</StoreArtifacts>
@tamir_dresher
The Runtime Package Store
• You can configure your project to use a Runtime Package Restore
• dotnet publish --manifest <PATH_TO_MANIFEST_FILE>
42

More Related Content

What's hot

Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
gree_tech
 
How We Test Linux
How We Test LinuxHow We Test Linux
How We Test Linux
GlobalLogic Ukraine
 
Bypassing patchguard on Windows 8.1 and Windows 10
Bypassing patchguard on Windows 8.1 and Windows 10Bypassing patchguard on Windows 8.1 and Windows 10
Bypassing patchguard on Windows 8.1 and Windows 10
Honorary_BoT
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
ropsu
 
DCSF 19 eBPF Superpowers
DCSF 19 eBPF SuperpowersDCSF 19 eBPF Superpowers
DCSF 19 eBPF Superpowers
Docker, Inc.
 
TFLite NNAPI and GPU Delegates
TFLite NNAPI and GPU DelegatesTFLite NNAPI and GPU Delegates
TFLite NNAPI and GPU Delegates
Koan-Sin Tan
 
Terraform AWS modules and some best practices - September 2019
Terraform AWS modules and some best practices - September 2019Terraform AWS modules and some best practices - September 2019
Terraform AWS modules and some best practices - September 2019
Anton Babenko
 
Injection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniquesInjection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniques
enSilo
 
Process injection - Malware style
Process injection - Malware styleProcess injection - Malware style
Process injection - Malware style
Sander Demeester
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
Roman Rodomansky
 
Borland star team to tfs simple migration
Borland star team to tfs simple migrationBorland star team to tfs simple migration
Borland star team to tfs simple migration
Shreesha Rao
 
Composer | PHP Dependency Manager
Composer | PHP Dependency ManagerComposer | PHP Dependency Manager
Composer | PHP Dependency Manager
Ujjwal Ojha
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016
Clark Everetts
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014D
 
Fluentd v0.14 Overview
Fluentd v0.14 OverviewFluentd v0.14 Overview
Fluentd v0.14 Overview
N Masahiro
 
Python at Facebook
Python at FacebookPython at Facebook
Python at Facebook
Angelo Failla
 
[若渴計畫] Black Hat 2017之過去閱讀相關整理
[若渴計畫] Black Hat 2017之過去閱讀相關整理[若渴計畫] Black Hat 2017之過去閱讀相關整理
[若渴計畫] Black Hat 2017之過去閱讀相關整理
Aj MaChInE
 
Deliver Python Apps with Docker
Deliver Python Apps with DockerDeliver Python Apps with Docker
Deliver Python Apps with Docker
Anton Egorov
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
Chris Tankersley
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Ontico
 

What's hot (20)

Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
Common Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gam...
 
How We Test Linux
How We Test LinuxHow We Test Linux
How We Test Linux
 
Bypassing patchguard on Windows 8.1 and Windows 10
Bypassing patchguard on Windows 8.1 and Windows 10Bypassing patchguard on Windows 8.1 and Windows 10
Bypassing patchguard on Windows 8.1 and Windows 10
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
DCSF 19 eBPF Superpowers
DCSF 19 eBPF SuperpowersDCSF 19 eBPF Superpowers
DCSF 19 eBPF Superpowers
 
TFLite NNAPI and GPU Delegates
TFLite NNAPI and GPU DelegatesTFLite NNAPI and GPU Delegates
TFLite NNAPI and GPU Delegates
 
Terraform AWS modules and some best practices - September 2019
Terraform AWS modules and some best practices - September 2019Terraform AWS modules and some best practices - September 2019
Terraform AWS modules and some best practices - September 2019
 
Injection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniquesInjection on Steroids: Codeless code injection and 0-day techniques
Injection on Steroids: Codeless code injection and 0-day techniques
 
Process injection - Malware style
Process injection - Malware styleProcess injection - Malware style
Process injection - Malware style
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Borland star team to tfs simple migration
Borland star team to tfs simple migrationBorland star team to tfs simple migration
Borland star team to tfs simple migration
 
Composer | PHP Dependency Manager
Composer | PHP Dependency ManagerComposer | PHP Dependency Manager
Composer | PHP Dependency Manager
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
Fluentd v0.14 Overview
Fluentd v0.14 OverviewFluentd v0.14 Overview
Fluentd v0.14 Overview
 
Python at Facebook
Python at FacebookPython at Facebook
Python at Facebook
 
[若渴計畫] Black Hat 2017之過去閱讀相關整理
[若渴計畫] Black Hat 2017之過去閱讀相關整理[若渴計畫] Black Hat 2017之過去閱讀相關整理
[若渴計畫] Black Hat 2017之過去閱讀相關整理
 
Deliver Python Apps with Docker
Deliver Python Apps with DockerDeliver Python Apps with Docker
Deliver Python Apps with Docker
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 

Similar to Tamir Dresher - Demystifying the Core of .NET Core

C++ Windows Forms L01 - Intro
C++ Windows Forms L01 - IntroC++ Windows Forms L01 - Intro
C++ Windows Forms L01 - Intro
Mohammad Shaker
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2
aminmesbahi
 
1..Net Framework Architecture-(c#)
1..Net Framework Architecture-(c#)1..Net Framework Architecture-(c#)
1..Net Framework Architecture-(c#)
Shoaib Ghachi
 
Whats new in .NET for 2019
Whats new in .NET for 2019Whats new in .NET for 2019
Whats new in .NET for 2019
Rory Preddy
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution Toolkit
Dimitry Snezhkov
 
.NET Core: a new .NET Platform
.NET Core: a new .NET Platform.NET Core: a new .NET Platform
.NET Core: a new .NET Platform
Alex Thissen
 
.Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015).Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015)
citizenmatt
 
(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop
Oren Novotny
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bits
Ken Cenerelli
 
ASP.NET 5 - Microsoft's Web development platform reimagined
ASP.NET 5 - Microsoft's Web development platform reimaginedASP.NET 5 - Microsoft's Web development platform reimagined
ASP.NET 5 - Microsoft's Web development platform reimagined
Alex Thissen
 
.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG
citizenmatt
 
tybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notestybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notes
WE-IT TUTORIALS
 
What should you know about Net Core?
What should you know about Net Core?What should you know about Net Core?
What should you know about Net Core?
Damir Dobric
 
Introduction to dot net
Introduction to dot netIntroduction to dot net
Introduction to dot net
QIANG XU
 
.Net Core
.Net Core.Net Core
.Net Core 1.0 vs .NET Framework
.Net Core 1.0 vs .NET Framework.Net Core 1.0 vs .NET Framework
.Net Core 1.0 vs .NET Framework
Wyn B. Van Devanter
 
Pottnet Meetup Essen - ASP.Net Core
Pottnet Meetup Essen - ASP.Net CorePottnet Meetup Essen - ASP.Net Core
Pottnet Meetup Essen - ASP.Net Core
Malte Lantin
 
Pottnet MeetUp Essen - ASP.Net Core
Pottnet MeetUp Essen - ASP.Net CorePottnet MeetUp Essen - ASP.Net Core
Pottnet MeetUp Essen - ASP.Net Core
Malte Lantin
 

Similar to Tamir Dresher - Demystifying the Core of .NET Core (20)

C++ Windows Forms L01 - Intro
C++ Windows Forms L01 - IntroC++ Windows Forms L01 - Intro
C++ Windows Forms L01 - Intro
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2.NET Core, ASP.NET Core Course, Session 2
.NET Core, ASP.NET Core Course, Session 2
 
1..Net Framework Architecture-(c#)
1..Net Framework Architecture-(c#)1..Net Framework Architecture-(c#)
1..Net Framework Architecture-(c#)
 
Whats new in .NET for 2019
Whats new in .NET for 2019Whats new in .NET for 2019
Whats new in .NET for 2019
 
Typhoon Managed Execution Toolkit
Typhoon Managed Execution ToolkitTyphoon Managed Execution Toolkit
Typhoon Managed Execution Toolkit
 
.NET Core: a new .NET Platform
.NET Core: a new .NET Platform.NET Core: a new .NET Platform
.NET Core: a new .NET Platform
 
.Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015).Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015)
 
(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop(WPF + WinForms) * .NET Core = Modern Desktop
(WPF + WinForms) * .NET Core = Modern Desktop
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bits
 
ASP.NET 5 - Microsoft's Web development platform reimagined
ASP.NET 5 - Microsoft's Web development platform reimaginedASP.NET 5 - Microsoft's Web development platform reimagined
ASP.NET 5 - Microsoft's Web development platform reimagined
 
.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG
 
tybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notestybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notes
 
What should you know about Net Core?
What should you know about Net Core?What should you know about Net Core?
What should you know about Net Core?
 
Introduction to dot net
Introduction to dot netIntroduction to dot net
Introduction to dot net
 
.Net Core
.Net Core.Net Core
.Net Core
 
.Net Core 1.0 vs .NET Framework
.Net Core 1.0 vs .NET Framework.Net Core 1.0 vs .NET Framework
.Net Core 1.0 vs .NET Framework
 
Pottnet Meetup Essen - ASP.Net Core
Pottnet Meetup Essen - ASP.Net CorePottnet Meetup Essen - ASP.Net Core
Pottnet Meetup Essen - ASP.Net Core
 
Pottnet MeetUp Essen - ASP.Net Core
Pottnet MeetUp Essen - ASP.Net CorePottnet MeetUp Essen - ASP.Net Core
Pottnet MeetUp Essen - ASP.Net Core
 
Intro to .NET and Core C#
Intro to .NET and Core C#Intro to .NET and Core C#
Intro to .NET and Core C#
 

More from Tamir Dresher

NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
Tamir Dresher
 
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher
 
Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher
 
Tamir Dresher - Async Streams in C#
Tamir Dresher - Async Streams in C#Tamir Dresher - Async Streams in C#
Tamir Dresher - Async Streams in C#
Tamir Dresher
 
Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher   Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher
Tamir Dresher
 
Tamir Dresher Clarizen adventures with the wild GC during the holiday season
Tamir Dresher   Clarizen adventures with the wild GC during the holiday seasonTamir Dresher   Clarizen adventures with the wild GC during the holiday season
Tamir Dresher Clarizen adventures with the wild GC during the holiday season
Tamir Dresher
 
Debugging tricks you wish you knew Tamir Dresher - Odessa 2019
Debugging tricks you wish you knew   Tamir Dresher - Odessa 2019Debugging tricks you wish you knew   Tamir Dresher - Odessa 2019
Debugging tricks you wish you knew Tamir Dresher - Odessa 2019
Tamir Dresher
 
From zero to hero with the actor model - Tamir Dresher - Odessa 2019
From zero to hero with the actor model  - Tamir Dresher - Odessa 2019From zero to hero with the actor model  - Tamir Dresher - Odessa 2019
From zero to hero with the actor model - Tamir Dresher - Odessa 2019
Tamir Dresher
 
Breaking the monolith to microservice with Docker and Kubernetes (k8s)
Breaking the monolith to microservice with Docker and Kubernetes (k8s)Breaking the monolith to microservice with Docker and Kubernetes (k8s)
Breaking the monolith to microservice with Docker and Kubernetes (k8s)
Tamir Dresher
 
.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher
Tamir Dresher
 
Testing time and concurrency Rx
Testing time and concurrency RxTesting time and concurrency Rx
Testing time and concurrency Rx
Tamir Dresher
 
Building responsive application with Rx - confoo - tamir dresher
Building responsive application with Rx - confoo - tamir dresherBuilding responsive application with Rx - confoo - tamir dresher
Building responsive application with Rx - confoo - tamir dresher
Tamir Dresher
 
.NET Debugging tricks you wish you knew tamir dresher
.NET Debugging tricks you wish you knew   tamir dresher.NET Debugging tricks you wish you knew   tamir dresher
.NET Debugging tricks you wish you knew tamir dresher
Tamir Dresher
 
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir DresherFrom Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
Tamir Dresher
 
Building responsive applications with Rx - CodeMash2017 - Tamir Dresher
Building responsive applications with Rx  - CodeMash2017 - Tamir DresherBuilding responsive applications with Rx  - CodeMash2017 - Tamir Dresher
Building responsive applications with Rx - CodeMash2017 - Tamir Dresher
Tamir Dresher
 
Debugging tricks you wish you knew - Tamir Dresher
Debugging tricks you wish you knew  - Tamir DresherDebugging tricks you wish you knew  - Tamir Dresher
Debugging tricks you wish you knew - Tamir Dresher
Tamir Dresher
 
Rx 101 - Tamir Dresher - Copenhagen .NET User Group
Rx 101  - Tamir Dresher - Copenhagen .NET User GroupRx 101  - Tamir Dresher - Copenhagen .NET User Group
Rx 101 - Tamir Dresher - Copenhagen .NET User Group
Tamir Dresher
 
Cloud patterns - NDC Oslo 2016 - Tamir Dresher
Cloud patterns - NDC Oslo 2016 - Tamir DresherCloud patterns - NDC Oslo 2016 - Tamir Dresher
Cloud patterns - NDC Oslo 2016 - Tamir Dresher
Tamir Dresher
 
Reactiveness All The Way - SW Architecture 2015 Conference
Reactiveness All The Way - SW Architecture 2015 ConferenceReactiveness All The Way - SW Architecture 2015 Conference
Reactiveness All The Way - SW Architecture 2015 Conference
Tamir Dresher
 
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Rx 101   Codemotion Milan 2015 - Tamir DresherRx 101   Codemotion Milan 2015 - Tamir Dresher
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Tamir Dresher
 

More from Tamir Dresher (20)

NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdfNET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
NET Aspire - NET Conf IL 2024 - Tamir Dresher.pdf
 
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptx
 
Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6Tamir Dresher - What’s new in ASP.NET Core 6
Tamir Dresher - What’s new in ASP.NET Core 6
 
Tamir Dresher - Async Streams in C#
Tamir Dresher - Async Streams in C#Tamir Dresher - Async Streams in C#
Tamir Dresher - Async Streams in C#
 
Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher   Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher
 
Tamir Dresher Clarizen adventures with the wild GC during the holiday season
Tamir Dresher   Clarizen adventures with the wild GC during the holiday seasonTamir Dresher   Clarizen adventures with the wild GC during the holiday season
Tamir Dresher Clarizen adventures with the wild GC during the holiday season
 
Debugging tricks you wish you knew Tamir Dresher - Odessa 2019
Debugging tricks you wish you knew   Tamir Dresher - Odessa 2019Debugging tricks you wish you knew   Tamir Dresher - Odessa 2019
Debugging tricks you wish you knew Tamir Dresher - Odessa 2019
 
From zero to hero with the actor model - Tamir Dresher - Odessa 2019
From zero to hero with the actor model  - Tamir Dresher - Odessa 2019From zero to hero with the actor model  - Tamir Dresher - Odessa 2019
From zero to hero with the actor model - Tamir Dresher - Odessa 2019
 
Breaking the monolith to microservice with Docker and Kubernetes (k8s)
Breaking the monolith to microservice with Docker and Kubernetes (k8s)Breaking the monolith to microservice with Docker and Kubernetes (k8s)
Breaking the monolith to microservice with Docker and Kubernetes (k8s)
 
.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher
 
Testing time and concurrency Rx
Testing time and concurrency RxTesting time and concurrency Rx
Testing time and concurrency Rx
 
Building responsive application with Rx - confoo - tamir dresher
Building responsive application with Rx - confoo - tamir dresherBuilding responsive application with Rx - confoo - tamir dresher
Building responsive application with Rx - confoo - tamir dresher
 
.NET Debugging tricks you wish you knew tamir dresher
.NET Debugging tricks you wish you knew   tamir dresher.NET Debugging tricks you wish you knew   tamir dresher
.NET Debugging tricks you wish you knew tamir dresher
 
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir DresherFrom Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
From Zero to the Actor Model (With Akka.Net) - CodeMash2017 - Tamir Dresher
 
Building responsive applications with Rx - CodeMash2017 - Tamir Dresher
Building responsive applications with Rx  - CodeMash2017 - Tamir DresherBuilding responsive applications with Rx  - CodeMash2017 - Tamir Dresher
Building responsive applications with Rx - CodeMash2017 - Tamir Dresher
 
Debugging tricks you wish you knew - Tamir Dresher
Debugging tricks you wish you knew  - Tamir DresherDebugging tricks you wish you knew  - Tamir Dresher
Debugging tricks you wish you knew - Tamir Dresher
 
Rx 101 - Tamir Dresher - Copenhagen .NET User Group
Rx 101  - Tamir Dresher - Copenhagen .NET User GroupRx 101  - Tamir Dresher - Copenhagen .NET User Group
Rx 101 - Tamir Dresher - Copenhagen .NET User Group
 
Cloud patterns - NDC Oslo 2016 - Tamir Dresher
Cloud patterns - NDC Oslo 2016 - Tamir DresherCloud patterns - NDC Oslo 2016 - Tamir Dresher
Cloud patterns - NDC Oslo 2016 - Tamir Dresher
 
Reactiveness All The Way - SW Architecture 2015 Conference
Reactiveness All The Way - SW Architecture 2015 ConferenceReactiveness All The Way - SW Architecture 2015 Conference
Reactiveness All The Way - SW Architecture 2015 Conference
 
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Rx 101   Codemotion Milan 2015 - Tamir DresherRx 101   Codemotion Milan 2015 - Tamir Dresher
Rx 101 Codemotion Milan 2015 - Tamir Dresher
 

Recently uploaded

2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 

Recently uploaded (20)

2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 

Tamir Dresher - Demystifying the Core of .NET Core

  • 3. 3 • Software architect, consultant and instructor • Software Engineering Lecturer @ Ruppin Academic Center • Author of Rx.NET in Action (Manning) @tamir_dresher http://www.TamirDresher.com. About Me 3
  • 4. @tamir_dresher Agenda • What is .NET Core • .NET Core application Core components • .NET Core Deployment Models • Sharing code with .NET Standard 4
  • 5. @tamir_dresher What’s .NET Core • A new implementation of .NET – modular, performant, seperated • Cross Platform and Cross Devices • Allows side-by-side execution • Pay-for-play model – only “pay” for the part of CoreFx you use • Open source: • Github.com/dotnet • https://github.com/dotnet/corefx • https://github.com/dotnet/core
  • 6. @tamir_dresher Full .NET dev process - build 7 using System; namespace testproj { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } .method private hidebysig static void Main ( string[] args ) cil managed { // Method begins at RVA 0x2050 // Code size 13 (0xd) .maxstack 8 .entrypoint IL_0000: nop IL_0001: ldstr "Hello World!" IL_0006: call void [System.Console]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Program::Main csc mscorlib.dll reference [app].dll/*.exe*.cs
  • 7. @tamir_dresher Full .NET dev process - execution 8 .method private hidebysig static void Main ( string[] args ) cil managed { // Method begins at RVA 0x2050 // Code size 13 (0xd) .maxstack 8 .entrypoint IL_0000: nop IL_0001: ldstr "Hello World!" IL_0006: call void [System.Console]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Program::Main mscorlib.dll load [app].dll/*.exe JIT Loader (Fusion) GC 1. MSCorEE.dll 2. C:Windows Microsoft.NET Framework64 [version] clr.dll Load and run CLR ...
  • 8. @tamir_dresher .NET Core • .NET Core runtime – contains the CoreCLR. exist for each supported platform • Location: C:Program FilesdotnetsharedMicrosoft.NETCore.App • .NET Core SDK – tooling, templates, packages cache + the runtime • Location: C:Program Filesdotnetsdk • .NET Core CLI - command-line (CLI) tools, used for building .NET Core apps and libraries • https://www.microsoft.com/net/download/all 9
  • 9. @tamir_dresher Full .NET dev process - build 10 using System; namespace testproj { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } .method private hidebysig static void Main ( string[] args ) cil managed { // Method begins at RVA 0x2050 // Code size 13 (0xd) .maxstack 8 .entrypoint IL_0000: nop IL_0001: ldstr "Hello World!" IL_0006: call void [System.Console]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Program::Main dotnet build Microsoft.NETCore.App reference [app].dll*.cs [app].runtimeconfig.json [app].runtimeconfig.dev.json [app].deps.json
  • 10. @tamir_dresher Full .NET dev process - execution 11 .method private hidebysig static void Main ( string[] args ) cil managed { // Method begins at RVA 0x2050 // Code size 13 (0xd) .maxstack 8 .entrypoint IL_0000: nop IL_0001: ldstr "Hello World!" IL_0006: call void [System.Console]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Program::Main CoreFX load app.dll JIT Loader (Fusion) GC dotnet-core Runtime Load and run CoreCLR ... > dotnet app.dll [app].runtimeconfig.json [app].runtimeconfig.dev.json [app].deps.json configuration reads
  • 11. Demo Creating a .NET Core console app and running in windows and linux 12
  • 12. @tamir_dresher .NET Core Build Artifacts 13 Dependencies Manifest Runtime configuration Optional configuration
  • 13. @tamir_dresher Changing runtime configuration • In Full .NET Some configuration were only possible in app/machine.config (e.g. changing the gc) • app/machine.config is gone, user *.runtimeconfig.json instead • Full list of configuration properties for CoreCLR 14 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.1</TargetFramework> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup> </Project> { "runtimeOptions": { ... }, "configProperties": { "System.GC.Server": true } } } [project].csproj [project].runtimeconfig.json
  • 14. @tamir_dresher Controlling the runtime version • The global.json file allows selection of the .NET Core tools version being used through the sdk property. • .NET Core CLI tools look for this file in the current working directory, or one of its parent directories. 15 … --- Resolving dotnet from working dir Probing path [c:tempnewprojbinDebugnetcoreapp2.1global.json] for global.json Probing path [c:tempnewprojbinDebugglobal.json] for global.json Probing path [c:tempnewprojbinglobal.json] for global.json Probing path [c:tempnewprojglobal.json] for global.json Probing path [c:tempglobal.json] for global.json Probing path [c:global.json] for global.json Terminating global.json search at [c:] … > SET COREHOST_TRACE=1 > dotnet app.dll { "sdk": { "version": "1.0.0-preview2-003121" } }
  • 15. @tamir_dresher Types of .NET Core applications deployments • Requires .NET Core Runtime on the target system. • Portable between installations of .NET Core. • Executed by running the dotnet utility. For example, dotnet app.dll 16 Framework Dependent Deployment (FDD) Self Contained Deployment (SCD) • .NET Core libraries and Runtime, are included with the application • Isolated from other .NET Core applications. • Include A renamed version of the platform-specific .NET Core host (such as app.exe on Windows) which then runs the actual app.dll
  • 16. @tamir_dresher Self Contained Deployment (SCD) 17 1. Add the Runtime Identifiers (RID) to the csproj • https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#windows-rids 2. Publish the project to the target platform <PropertyGroup> <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> </PropertyGroup> > dotnet publish -c Release -r win10-x64 > dotnet publish -c Release -r osx.10.11-x64
  • 17. @tamir_dresher Self Contained Deployment (SCD) 18 1. Add the Runtime Identifiers (RID) to the csproj • https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#windows-rids 2. Publish the project to the target platform <PropertyGroup> <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers> </PropertyGroup> > dotnet publish -c Release -r win10-x64 > dotnet publish -c Release -r osx.10.11-x64
  • 20. @tamir_dresher The problem 21 .NET Framework .NET Core Xamarin(Mono) WinForms WPF ASP.NET UWP Console ASP.NET Core iOS OS X Android Framework Class Library (FCL) CoreFX Mono Class Library MyLib.dll ?
  • 21. @tamir_dresher Possible Solution – portable Class Library (PCL) 22 .NET 4.5 Silverlight 5 Windows 8 Profile47
  • 22. @tamir_dresher Possible Solution – portable Class Library (PCL) 23 .NET 4.5 Silverlight 5 Windows 8 Profile47
  • 25. @tamir_dresher A better solution - .NET Standard .NET Framework .NET Core Xamarin(Mono) WinForms WPF ASP.NET UWP Console ASP.NET Core UWP Console ASP.NET Core Framework Class Library (FCL) CoreFX Mono Class Library.NET Standard
  • 26. @tamir_dresher A better solution - .NET Standard • A Spec (Standard) supported by all .NET implementations (Currently 2.0) • .NET Standard is a set of APIs that all .NET platforms have to implement. This unifies the .NET platforms and prevents future fragmentation. • https://github.com/dotnet/standard 2.0 1.6 1.3 1.0
  • 27. @tamir_dresher How a .NET Standard works? 28
  • 28. @tamir_dresher .NET Standard Shim and Stubs – build time 30
  • 29. @tamir_dresher .NET Standard Shim and Stubs – build time 31
  • 31. @tamir_dresher .NET Standard Shim and Stubs – runtime 33
  • 32. @tamir_dresher .NET Standard Shim and Stubs – runtime 34 [install dir]dotnetsharedMicrosoft.NETCore.App2.1.0-preview1-26216-03
  • 33. @tamir_dresher .NET Standard Shim and Stubs – runtime 35 [install dir]dotnetsharedMicrosoft.NETCore.App2.1.0-preview1-26216-03
  • 34. @tamir_dresher Summary • What is .NET Core – cross platform .NET • .NET Core application Core components • SDK, Runtime • Artifacts - *.runtimeconfig.{dev}.json, *. deps.json • .NET Core Deployment Models – FDD, SCD • Sharing code with .NET Standard • PCL vs .NET Standard • NETStandard.Library, netstandard.dll shim and stubs 36
  • 37. @tamir_dresher The Runtime Package Store • A local repository of pre-downloaded nuged packages • The new GAC • dotnet store x64 netcoreapp2.0 microsoft.applicationinsights microsoft.aspnetcore ... x86 netcoreapp2.0 microsoft.applicationinsights microsoft.aspnetcore ... 40
  • 38. @tamir_dresher The Runtime Package Store 41 <Project Sdk="Microsoft.NET.Sdk"> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="10.0.3" /> <PackageReference Include="Moq" Version="4.7.63" /> </ItemGroup> </Project> dotnet store --manifest packages.csproj --runtime win 10-x64 --framework netcoreapp 2.0 --framework-version 2.0.0 <StoreArtifacts> <Package Id="Newtonsoft.Json" Version="10.0.3" /> <Package Id="Castle.Core" Version="4.1.0" /> <Package Id="Moq" Version="4.7.63" /> </StoreArtifacts>
  • 39. @tamir_dresher The Runtime Package Store • You can configure your project to use a Runtime Package Restore • dotnet publish --manifest <PATH_TO_MANIFEST_FILE> 42

Editor's Notes

  1. Hello everyone, thank you all for joining me today. In the next hour or so I'm going to talk about the key-thing that revived the .NET world in recent years and made it awesome. .NET Core How many of you have are using .NET Core? This talk is an introductory level talk where I'm going to start the very basic and share some the things I learned along the way https://github.com/dotnet/swag
  2. My name is tamir dresher Im an architect from codevalue israel and a software engineering lecturer at the ruppin academic center CodeValue is a consulting company and we are also the proud development center of OzCode the amazing debugging extension for visual studio. We have a booth here at conference, so please go and check it out, youll be amazed how you lived without it. My book Rx in action is now available at Manning early access program should be published in the next few months. And that the end of my self promotion(it never hurts right?). So what are we really here for?
  3. FCL – Framework Class Library
  4. On Mac OS you could check .net core version by using below command. ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/On Ubuntu: ls /usr/share/dotnet/shared/Microsoft.NETCore.App/
  5. FCL – Framework Class Library https://github.com/dotnet/docs/blob/master/docs/core/tutorials/netcore-hosting.md C:\Program Files\dotnet\dotnet.exe, app: C:\Program Files\dotnet\sdk\2.1.300-preview1-008174\MSBuild.dll
  6. SET COREHOST_TRACE=1
  7. var osNameAndVersion = System.Runtime.InteropServices.RuntimeInformation.OSDescription
  8. intersection
  9. https://github.com/dotnet/standard/blob/master/docs/versions.md
  10. additive https://github.com/dotnet/standard/blob/master/docs/versions.md