<<

Past, present and future of C# and .NET

Kathleen Dollard Director of Engineering, ROICode [email protected] 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 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 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’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. 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 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 C++ Circa 2000 Visual Basic Circa 2000 Road ahead Circa 2000 OTHER THINGS WERE ALSO HAPPENING AT THE END OF THE LAST CENTURY AND THEN CAME…

JAVA .NET JAVA .NET JAVA .NET

• Strongly and statically typed with manifest • Strongly and statically typed with manifest • Object oriented, class based • Object oriented, class based • Semi-interpreted (JVM) • Semi-interpreted (MSIL) • Garbage collected (traced) • Garbage collected (traced) • Curly braces • Curly braces (C#) • Reflection • Reflection JAVA .NET

• Arbitrary precision (library) • Unsigned ints, decimal (now imaginary, etc.) • Primitive types do not have common root • All types have common root • Primitives wrapped for methods • All types: methods, properties, interfaces • Primitive and reference types • Value and reference types • Defined operators (inclusion of new types) • Enumerations are class based • Enumerations are bit manipulation of integers • Wrappers and adapters • Delegates THE RACE WAS ON… EFFECT ON .NET • Different goals • C# • Visual Basic EFFECT ON .NET • Different goals • C#: Convert Java programmers • Visual Basic: Keep existing VB developers EFFECT ON .NET • Different goals • C#: Convert Java programmers • Visual Basic: Keep existing VB developers

• “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 is sealed 2002

2003

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET 2002

2003

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 2002

2003

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002

2003

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

2003

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET 2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 Road ahead Circa 2005 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR) 2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF 2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

2012 .NET and Visual Studio Visual and .NET 2013

2015 Road ahead Circa 2010

Microsoft launches Azure and announces

- 1 year before acquiring Skype - 3 years before acquiring - 4 years before Satya takes leadership • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro)

2012 .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro)

2012 • .NET 4.5 ETW .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro)

2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro)

2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro)

2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus .NET and Visual Studio Visual and .NET 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI 2013

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI 2013 • Embraced regular updates

2015 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI 2013 • Embraced regular updates (Update 4 had checkbox for all caps menus)

2015 Road ahead Circa 2014 • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI 2013 • Embraced regular updates (Update 4 had checkbox for all caps menus)

• Roslyn compilers, OSS, start of ASP.NET rewrite 2015 • Visual Studio lights up! • First release of .NET (after long beta) 4 years after start of project Cool 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0

• No changes to .NET (beyond a few bug fixes) 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ 2008 • Lambda’s, extension methods

• Dynamic Language Runtime (DLR), MEF, PCL 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI 2013 • Embraced regular updates (Update 4 had checkbox for all caps menus)

• Roslyn compilers, OSS, start of ASP.NET rewrite 2015 • Visual Studio lights up! Sentence case is the default for menus • First release of .NET (after long beta) 4 years after start of project Cool •Not ASP. OOP 2002 • OOP, traced GC, painful changes for VB programmers

• Bug fixes and updates •Mobile controls, automatic input validation 2003 • .NET Compact Framework

• Major changes to .NET, pretty much the beginning of time •New controls, master pages, themes, web 2005 • Generics, anonymous methods, iterators, nullables, 64 bit, ASP.NET 2.0 parts, personalization, full pre-compilation

• No changes to .NET (beyond a few bug fixes) •WCF, CardSpace 2006 • WPF, WCF, WF, InfoCard/Cardspace

• LINQ •LINQ, new data controls, AJAX in 2008 • Lambda’s, extension methods framework, WCF support for RSS, JSON,

• Dynamic Language Runtime (DLR), MEF, PCL •MVC 2, 3 2010 • .NET 4.0 is the first major update to .NET since 2.0, Lazy, Tuple, BigInt

• Async/await, Windows Store (Metro) •Async, JS editor better, bundling/min, 2012 • .NET 4.5 ETW, TypeInfo, lots of cleanup, VS backwards compat, all caps menus MVC 4, HTML 5 in WebForms

.NET and Visual Studio Visual and .NET • Improved debugging, including async debugging, WinForms resizing and high DPI •Bootstrap 3, Web API 2, Oauth 2, CORS, 2013 • Embraced regular updates (Update 4 had checkbox for all caps menus) MVC5, EF 6, SignalR, OWin

• Roslyn compilers, OSS, start of ASP.NET rewrite •ASP.NET 4.5.x series parallels new ASP.NET 2015 • Visual Studio lights up! Sentence case is the default for menus Core series Road ahead Circa 2014 Road ahead 2017 Road ahead 2017 (January) Road ahead 2017 (late) What is .NET?

Editor

Compiler Runtime

Libraries What is does it take to develop?

Editor

Compiler Runtime

Libraries What is does it take to develop?

Editor Compiler Runtime

Libraries What is does it take to develop?

Data Basic Editor Compiler UI libraries Runtime libraries libraries

Libraries What is does it take to develop?

Delivery Data Basic Editor Compiler Runtime libraries libraries libraries What is does it take to develop?

Compiler

Delivery Data Basic Editor Compiler Runtime framework libraries libraries What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries

Visual Studio WPF, UWP .NET CLR ASP.NET 4.x EF 6.x Framework ASP.NET Core EF Core .NET Core Core CLR

Project Rider Xamarin Mono forms What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries

Visual Studio WPF, UWP .NET CLR .NET ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core .NET Core Core CLR .NET Core

Project Rider Xamarin Xamarin Mono Mono for forms Xamarin Sure, I can explain that to non-technical decision maker in my world OSS

Brilliant Challenging • Sharing ownership • Vague quality metrics • Tapping collective brilliance • Varying meaning of “beta” • Faster release cycles • Changes during “beta” • Transparency • Managing granularity • Responsive to users • Synchronization in release of dependent parts • Granularity • Early unreliable roadmaps What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries

Visual Studio WPF, UWP .NET CLR .NET ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core .NET Core Core CLR .NET Core

Project Rider Xamarin Xamarin Mono Mono for forms Xamarin What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime framework libraries libraries

Visual Studio WPF, UWP .NET CLR .NET ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core .NET Core Core CLR .NET Core

Project Rider Xamarin Xamarin Mono Mono for forms Xamarin What is does it take to develop?

Compiler

Delivery Data Basic Your code Runtime Editor framework libraries libraries

.NET Standard Visual Studio WPF, UWP .NET CLR ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core CoreFX Core CLR

Project Rider Xamarin Xamarin Mono forms What is does it take to develop?

Compiler

Delivery Data Basic Your code Runtime Editor framework libraries libraries

.NET Standard Visual Studio WPF, UWP .NET CLR ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core CoreFX Core CLR

Project Rider Xamarin Xamarin Mono forms .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 https://weblog.west-wind.com/posts/2016/Nov/23/NET- Standard-20-Making-Sense-of-NET-Again Standard libraries implement at least .NET Standard What is does it take to develop?

Compiler

Delivery Data Basic Your code Runtime Editor libraries libraries libraries

.NET Standard Visual Studio WPF, UWP .NET CLR ASP.NET 4.x EF 6.x Framework Visual Studio Code ASP.NET Core EF Core CoreFX Core CLR

Project Rider Xamarin Xamarin Mono forms Your App .NET 4.n Foo

Your App .NET Core Bar

.NET Standard Your App .NET 4.n Foo

Your App .NET Core Bar

.NET Standard .NET Standard .NET libraries Standard Your .NET 4.n libraries WinForms

UWP Bridge (previously Project Centennial) .NET for UWP UWP

.NET Standard Your .NET 4.n WPF .NET Standard libraries Your ASP.NET .NET 4.n .NET 4.n WebForms

Your ASP.NET ASP.NET .NET 4.n Core 1.n .NET Core MVC (MVC)

Your ASP.NET .NET 4.n WebAPI Fall 2017

Your .NET Standard 2 ASP.NET .NET 4.n WebForms Your ASP.NET .NET ASP.NET .NET 4.n Core MVC Standard MVC

Your ASP.NET .NET 4.n WebAPI .NET Standard libraries Preview 1

Your .NET Standard 2 ASP.NET .NET 4.n WebForms Your ASP.NET ASP.NET .NET 4.n .NET Core Core MVC MVC

Your Preview 1 ASP.NET .NET 4.n ONLY WebAPI .NET Standard libraries Entity Framework

.NET 4.n

Your Your .NET 4.n .NET Core EF 6.n EF Core 1.n

(Recent also run .NET Standard) Entity Framework

Your Your .NET .NET 4.n EF 6.n EF Core 2 Standard

.NET Standard libraries Standard libraries implement at least .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 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2 vNext 4.6.1 (with tooling 1.0)

.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1 (with tooling 2.0)

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 .0 10.0 10.0 10.0 10.0 vNext vNext vNext Platform .0 8.0 8.1 .1 8.1 8.1

Windows Phone 8.0 Silverlight CLR Included in ✓ Included in ✓ Included in .NET Framework versiVisual Studio + Can be installed on + Can be installed on version on version Windows .NET 4.7 4 2017 ✓10 Creators +2016, 2012 R2, 2012, 2008 R2 SP1 +10 Anniverary, 8.1, 7 .NET 4.6.2 4 ✓ 10 Anniverary Update, ✓ 2016, + 8.1, 7 + 2012 R2, 2012, 2008 R2 SP1 .NET 4.6.1 4 2016 Update 1 ✓ 10 November Update, + 2012 R2, 2012, 2008 R2 SP1 + 10, 8.1, 8, 7 .NET 4.6 4 2015 ✓ 10, +2012 R2, 2012, 2008 R2 SP1, 2008 SP2 + 8.1, 8, 7, Vista 4.5.2 4 - + 8.1, 8, 7, Vista + 2012 R2, 2012, 2008 R2 SP1, 2008 SP2 4.5.1 4 2013 ✓ 8.1, ✓ 2012 R2, + 8, 7, Vista + 2012, 2008 R2 SP1, 2008 SP2 4.5 4 2012 ✓ 8, ✓ 2012, + 7, Vista + 2008 R2 SP1, 2008 SP2 4 4 2010 + 7, Vista + 2008 R2 SP1, 2008 SP2, 2003 3.5 2 2008 ✓ 10, 8.1*, 8, 7 ✓2008 R2 SP1* + Vista + 2012 R2, 2012, 2008 SP2, 2003 3 2 - ✓ Vista ✓ 2008 R2 SP1*, 2008 SP2, 2003 What is does it take to develop?

Compiler

Delivery Data Basic Editor Your code Runtime libraries libraries libraries

.NET Standard Visual Studio WPF, UWP ASP.NET 4.x EF 6.x API definitions so Visual Studio .NET Framework, Code ASP.NET Core EF Core .NET Core, Xamarin Xamarin and their libraries forms follow same API .NET Core

• New • Faster • Cross platform • Module • Open Source Small? Dependencies? Package of packages Trimmed .json projects? Replaced with an updated MSBuild 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 What train? What train?

LTS: Long term support FTS: Fast track support Nightly build LTS FTS • Major version numbers • Minor version numbers • Support • Support • 3 years from release • 3 years from release • 1 year from next major • 1 year from next major • 3 months from next minor Pick your track

2.0 3.0 4.0

LTS

FTS

2.0 2.1 2.2 2.3 3.0 3.1 3.2 3.3 4.0 4.1 4.2 4.3 LTS FTS • Major version numbers • Minor version numbers • Support • Support • 3 years from release • 3 years from release • 1 year from next major • 1 year from next major • 3 months from next minor • Will get a lot of press • 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 Questions?

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