Past, present and future of
C# and .NET
Kathleen Dollard
Director of Engineering, ROICode
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’ll see both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’ll see both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’ll see both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’llsee both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’llsee both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
Coding: 2 Advanced: 2
“In the beginning there was…” Take a look back at over 15 years of .NET and C# evolution and look into the future driven by enormous underlying changes. Those
changes are driven by a shift in perception of how .NET fits into the Microsoft ecosystem. You’ll leave understanding how to leverage the .NET Full Framework,
.NET Core 1.0, .NET Standard at the right time. Changes in .NET paralleled changes in the languages we’ll reflect on how far C# and Visual Basic have come and how they’ve
weathered major changes in how we think about code. Looking to the future, you’ll see both the impact of functional approaches and areas where C# probably won’t go.
The story would not be complete without cruising through adjacent libraries – the venerable ASP.NET and rock-star Entity Framework that’s recovered so well from its
troubled childhood. You’ll leave this talk with a better understanding of the tool you’re using today, and how it’s changing to keep you relevant in a constantly
morphing world.
My other talks at SDDConf
• Session: C# 6 & below
• Session: C# 7 & above
• Session: Visual Studio Tips and Tricks
• Workshop: I will make you a better C# programmer
Independent?What do I know about this history stuff?
• Trained as a research chemist
• X-Ray crystallographer & electrochemist with interest in active sites of proteins
• Worked in the Microsoft languages space since about 1996
• Previously, Clipper, Fortran, C, C++, FORTH, BASIC, 4GLs
• Microsoft MVP since 1998, recognized for community work since 1980’s
• I care a lot about community and people in it
• Do NOT work for Microsoft
• Do respect a lot of people that work at Microsoft (and other places)
• Have been giving language feedback since VB4 beta
• Contributed at every MVP summit and a number of private design meetings
JAVA
• Strongly and statically typed with manifest
• Object oriented, class based
• Semi-interpreted (JVM)
• Garbage collected (traced)
• Curly braces
• Reflection
.NET
• Strongly and statically typed with manifest
• Object oriented, class based
• Semi-interpreted (MSIL)
• Garbage collected (traced)
• Curly braces (C#)
• Reflection
• Arbitrary precision (library)
• Primitive types do not have common root
• Primitives wrapped for methods
• Primitive and reference types
• Enumerations are class based
• Wrappers and adapters
• Unsigned ints, decimal (now imaginary, etc.)
• All types have common root
• All types: methods, properties, interfaces
• Value and reference types
• Defined operators (inclusion of new types)
• Enumerations are bit manipulation of integers
• Delegates
JAVA .NET
EFFECT ON .NET• Different goals • C#: Convert Java programmers
• Visual Basic: Keep existing VB developers
EFFECT ON .NET• Different goals
• “Fix” possible deficiencies in Java
• Common root and methods available on all types
• Delegate and event models
• Extra types and user-defined value types and operators
• Performance was (perceived as) required
• Integer checks disabled (for C#)
• (One of the reasons) lower array bound restricted to zero
• (Later, one of the reasons) List<T> is sealed
• C#: Convert Java programmers
• Visual Basic: Keep existing VB developers
2002
• First release of .NET (after long beta)
2003
2005
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
2003
2005
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
2005
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
• Dynamic Language Runtime (DLR)
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
• Dynamic Language Runtime (DLR), MEF
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
• Dynamic Language Runtime (DLR), MEF, PCL
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
Road aheadCirca 2010
Microsoft launches Azure and announces Windows Phone
- 1 year before acquiring Skype- 3 years before acquiring Nokia- 4 years before Satya takes leadership
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await, Windows Store (Metro)
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
2013
2015
.NET
an
d V
isu
al S
tud
io
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
• Improved debugging, including async debugging
2015
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
• Improved debugging, including async debugging, WinForms resizing and high DPI
2015
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
• Improved debugging, including async debugging, WinForms resizing and high DPI
• Embraced regular updates
2015
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
• Improved debugging, including async debugging, WinForms resizing and high DPI
• Embraced regular updates (Update 4 had checkbox for all caps menus)
2015
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
2015
• Roslyn compilers, OSS, start of ASP.NET rewrite
• Visual Studio lights up!
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
• Improved debugging, including async debugging, WinForms resizing and high DPI
• Embraced regular updates (Update 4 had checkbox for all caps menus)
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
2015
• Roslyn compilers, OSS, start of ASP.NET rewrite
• Visual Studio lights up! Sentence case is the default for menus
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
• Improved debugging, including async debugging, WinForms resizing and high DPI
• Embraced regular updates (Update 4 had checkbox for all caps menus)
• Roslyn compilers, OSS, start of ASP.NET rewrite
• Visual Studio lights up! Sentence case is the default for menus
• Improved debugging, including async debugging, WinForms resizing and high DPI
• Embraced regular updates (Update 4 had checkbox for all caps menus)
2002
• First release of .NET (after long beta) 4 years after start of project Cool
• OOP, traced GC, painful changes for VB programmers
2003
• Bug fixes and updates
• .NET Compact Framework
2005
• Major changes to .NET, pretty much the beginning of time
• Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0
2006
• No changes to .NET (beyond a few bug fixes)
• WPF, WCF, WF, InfoCard/Cardspace
2008
• LINQ
• Lambda’s, extension methods
2010
2012
2013
2015
.NET
an
d V
isu
al S
tud
io
• Async/await, Windows Store (Metro)
• .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus
• Dynamic Language Runtime (DLR), MEF, PCL
• .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt
•Not ASP. OOP
•Mobile controls, automatic input validation
•New controls, master pages, themes, web parts, personalization, full pre-compilation
•WCF, CardSpace
•LINQ, new data controls, AJAX in framework, WCF support for RSS, JSON,
•MVC 2, 3
•Async, JS editor better, bundling/min, MVC 4, HTML 5 in WebForms
•Bootstrap 3, Web API 2, Oauth 2, CORS, MVC5, EF 6, SignalR, OWin
•ASP.NET 4.5.x series parallels new ASP.NET Core series
What is does it take to develop?
RuntimeCompilerEditor
Libraries
Basic libraries
UI librariesData
libraries
What is does it take to develop?
RuntimeCompilerBasic
librariesEditor
Delivery libraries
Data libraries
What is does it take to develop?
RuntimeBasic
librariesEditor
Delivery framework
Data libraries
Compiler
Compiler
What is does it take to develop?
RuntimeYour codeBasic
librariesEditor
Delivery framework
Data libraries
Compiler
What is does it take to develop?
RuntimeYour codeBasic
librariesEditor
Delivery framework
Data libraries
Compiler
CLR
Core CLR
Mono
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
.NET Core
Xamarin
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
RuntimeBasic
librariesYour code
Delivery framework
Data libraries
Editor
Compiler
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
.NET Core
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
RuntimeBasic
librariesYour code
Delivery framework
Data libraries
Editor
Compiler
.NET Core
Mono for Xamarin
.NET
OSS
Brilliant• Sharing ownership
• Tapping collective brilliance
• Faster release cycles
• Transparency
• Responsive to users
• Granularity
Challenging• Vague quality metrics
• Varying meaning of “beta”• Changes during “beta”
• Managing granularity
• Synchronization in release of dependent parts
• Early unreliable roadmaps
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
.NET Core
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
RuntimeBasic
librariesYour code
Delivery framework
Data libraries
Editor
Compiler
.NET Core
Mono for Xamarin
.NET
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
.NET Core
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
RuntimeBasic
librariesYour code
Delivery framework
Data libraries
Editor
Compiler
.NET Core
Mono for Xamarin
.NET
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
CoreFX
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
.NET Standard
RuntimeBasic
librariesYour code
Delivery framework
Data librariesEditor
Compiler
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
CoreFX
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
.NET Standard
RuntimeBasic
librariesYour code
Delivery framework
Data librariesEditor
Compiler
.NET Standard
The .NET Standard Library is a formal specification of .NET APIs that are intended to be available on all .NET runtimes.
The motivation behind the Standard Library is establishing greater uniformity in the .NET ecosystem.
ECMA 335 continues to establish uniformity for .NET runtime behavior, but there is no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.
Standards
• ECMA 334 – C# (2002/2003 with updates)
• ECMA 335 – CLI (2001/2003 with updates)• Rotor (shared source) implemented 334/335 no longer relevant
• ECMA 372 = C++/CLI
.NET Standard(not yet an ECMA standard)
(Will there be a .NET Standard Standard?)
.NET Standard
• Formal specification• “of .NET APIs that are intended to be available on all .NET runtimes”
• Provides uniformity in the .NET ecosystem• Let’s your code to run anywhere
• 335 is for CLI, this is for BCL
• Let’s you produce portable libraries • Not same as Portable Class Libraries
• Reduce/eliminate need for conditional compilation for OS
htt
ps:
//w
eblo
g.w
est-
win
d.c
om
/po
sts/
20
16
/No
v/2
3/N
ET-
Stan
dar
d-2
0-M
akin
g-Se
nse
-of-
NET
-Aga
in
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Framework
CoreFX
Xamarin
CLR
Core CLR
Mono
Visual Studio
Visual Studio Code
Project Rider
What is does it take to develop?
.NET Standard
RuntimeBasic
librariesYour code
Delivery libraries
Data librariesEditor
Compiler
.NET Standard
Your WinForms
.NET 4.n
Your WPF
.NET 4.n
UWP Bridge (previously Project Centennial)
UWP.NET for
UWP
.NET Standardlibraries
.NET Standardlibraries
.NET Standardlibraries
Your ASP.NET
WebForms.NET 4.n
Your ASP.NET WebAPI
Your ASP.NET
MVC.NET Core
.NET 4.n
.NET 4.nASP.NET Core 1.n (MVC)
.NET 4.n
.NET Standardlibraries
Your ASP.NET
WebForms.NET 4.n
Your ASP.NET WebAPI
Your ASP.NET
MVC
.NET Standard
.NET 4.n
.NET 4.nASP.NET
Core MVC
Fall 2017.NET Standard 2
.NET Standardlibraries
Your ASP.NET
WebForms.NET 4.n
Your ASP.NET WebAPI
Your ASP.NET
MVC.NET Core
.NET 4.n
.NET 4.nASP.NET
Core MVC
Preview 1 ONLY
Preview 1.NET Standard 2
Your EF 6.n
.NET 4.n
Entity Framework
.NET Core
.NET 4.n
Your EF Core 1.n
(Recent also run .NET Standard)
.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (with tooling 1.0)
4.5 4.5 4.5.1 4.6 4.6.1 4.6.2 vNext 4.6.1
.NET Framework (with tooling 2.0)
4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 vNext
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 vNext
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 vNext
Universal Windows Platform
10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight
8.0
.NET Framework version
CLR version
Included in Visual Studio version
✓ Included in+ Can be installed onWindows
✓ Included in+ Can be installed onWindows Server
.NET 4.7 4 2017 ✓10 Creators+10 Anniverary, 8.1, 7
+2016, 2012 R2, 2012, 2008 R2 SP1
.NET 4.6.2 4 ✓ 10 Anniverary Update, + 8.1, 7
✓ 2016, + 2012 R2, 2012, 2008 R2 SP1
.NET 4.6.1 4 2016 Update 1 ✓ 10 November Update, + 10, 8.1, 8, 7
+ 2012 R2, 2012, 2008 R2 SP1
.NET 4.6 4 2015 ✓ 10, + 8.1, 8, 7, Vista
+2012 R2, 2012, 2008 R2 SP1, 2008 SP2
4.5.2 4 - + 8.1, 8, 7, Vista + 2012 R2, 2012, 2008 R2 SP1, 2008 SP2
4.5.1 4 2013 ✓ 8.1, + 8, 7, Vista
✓ 2012 R2, + 2012, 2008 R2 SP1, 2008 SP2
4.5 4 2012 ✓ 8, + 7, Vista
✓ 2012, + 2008 R2 SP1, 2008 SP2
4 4 2010 + 7, Vista + 2008 R2 SP1, 2008 SP2, 20033.5 2 2008 ✓ 10, 8.1*, 8, 7
+ Vista✓2008 R2 SP1*+ 2012 R2, 2012, 2008 SP2, 2003
3 2 - ✓ Vista ✓ 2008 R2 SP1*, 2008 SP2, 2003
EF 6.x
EF Core
WPF, UWP
ASP.NET 4.x
ASP.NET Core
Xamarinforms
.NET Standard
API definitions so.NET Framework,
.NET Core, Xamarin
and their basic librariesfollow same API
Visual Studio
Visual Studio Code
What is does it take to develop?
RuntimeBasic
librariesYour code
Delivery libraries
Data libraries
Editor
Compiler
ASP.NET Core
• Faster
• Rewritten for currently common scenarios
• Runs cross platform and off IIS (IIS still provides value)
• Sweet built-in dependency injection (DI)
• Simple configuration from multiple sources with fallback
• Only include what you want• Now there is also a reasonable default
• Razor pages
Entity Framework Core 2.0
• Global filters
• Flexible mapping
• Context pooling
• EF Everywhere (IoT demo)
• Compiled Queries
• EF Functions
• Owned Entity improvements (navigation properties)
• MAYBE: Seed data
https://channel9.msdn.com/Events/Build/2017/B8050
LTS• Major version numbers
• Support• 3 years from release
• 1 year from next major
FTS• Minor version numbers
• Support• 3 years from release
• 1 year from next major
• 3 months from next minor
LTS• Major version numbers
• Support• 3 years from release
• 1 year from next major
• Will get a lot of press
FTS• Minor version numbers
• Support• 3 years from release
• 1 year from next major
• 3 months from next minor
• Will get a lot of press
More on support
• Support for ASP.NET Core: What is an LTS?
• Maria Naggaga Nakanwagi
• Build 2017
• https://channel9.msdn.com/Events/Build/2017/T6072
Windows Portability Analyzer
https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer
Takeaways (your mileage may vary)
• .NET needs to change to stay relevant
• Change looked really painful before .NET Standard• With Standard you can separately schedule your shift to Core• Prior to 2.0 API’s are limited
• Planning this year• Go to .NET 4.61 or 4.7 if you can (skip 4.6.2)• Run .NET Portability answer early and often• Watch for Standard 2.0; use it when it’s ready, even if you are using .NET 4.6x• Switch to ASP.NET/EF Core when you want it’s features (cross platform)
• Pick the right support track
• Core is on a brilliant set of modern principles
References
http://www.hanselman.com/blog/WhatNETDevelopersOughtToKnowToStartIn2017.aspx
https://docs.microsoft.com/en-us/dotnet/articles/standard/library
https://blogs.msdn.microsoft.com/dotnet/2016/07/26/net-support-and-versioning/
https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer
https://weblog.west-wind.com/posts/2016/Nov/23/NET-Standard-20-Making-Sense-of-NET-Again
Questions?