 Hi, I'm Scott Hunter and I'm here today to talk about .NET Core 3 which you can now use with the Visual Studio 2019 RTM. We consider .NET to be your platform for building any type of application. Whether that's desktop or web, we've added Cloud, mobile, gaming, IoT, and AI. Today, I'm here to talk about .NET Core 3. We have a preview available now that runs on Visual Studio 2019. .NET Core 3 adds the ability to build WinForm WPF applications on .NET Core. It gives the desktop developer flexible deployment, side-by-side, single-exy. For web, we have a whole bunch of new technologies around building client applications, using razor components, using GRPC, and much more. We have significant performance improvements. .NET Core has always been faster, making it faster. We have new C-Sharp language features to make you more productive and have less errors in your code. Also, .NET Core has always been our open-source platform. So as we bring the desktop platforms WinForms and WPF to .NET Core, we've also made them open-source. All the code is on GitHub for you to check out and contribute back to us. Let's talk about the journey from .NET Core 2 to .NET Core 3. With .NET Core 1 and 2, we primarily had web and Cloud application types in .NET Core. We're vastly expanding the applications you can build with .NET Core 3. Now you'll be able to build desktop applications with WinForms and WPF, IoT applications running on Raspberry Pi and small devices, and with ML.NET, full support for machine learning and AI, all on .NET Core 3. Our big themes with Core 3 are we want to build great desktop applications. So we've got WinForms, WPF, we brought Entity Framework 6, all the things make it easy to port your desktop application to .NET Core. We live in a world of ML and AI. We have a great library called ML.NET that will ship as part of .NET Core 3 as well. Then the web is the web. We want to make sure that we're the best platform for building web, so we have a bunch of new features in the web space. So let's start drilling into a few of these. The first is desktop. First off, we want to make sure that as you build these desktop applications, you can use all of our frameworks. And so we have a new feature called XAML Islands. You can take all of the controls in UWP. These are the touch-enabled controls, and you can now host them directly in your WinForm or WPF application. Imagine if you want to sign with your finger in an expense report application. Maybe you want to use the newer browser or the newer media player in your WinForm WPF application. You can now drag those in and use those directly in those applications. And as monitors get bigger with 4K and 8K, we want to add better support for high DPI. We want these desktop applications to be able to access all the Windows 10 APIs, take advantage of the latest features of the Windows operating system. And all these desktop features are also available in .NET Framework 4.8 as well. Why Core? Why do you want to move your desktop application to Core? There's a variety of reasons. .NET Core is our modern .NET. It's the fastest moving version of .NET with all the latest features. So you get a bunch of cool enhancements. You get side by side. A developer could build a WinForm application with .NET Core using the latest version of .NET Core and not worry about having your IT team install a new version of .NET Framework. You can install that .NET Core either machine wide or as part of your application. And even better, what if you don't want to install it at all? Check a box, we give you a single XE, copy the XE to the machines, and they'll run with no .NET Core installed at all. So you can use the latest versions, the latest features in your application without installing anything on the host OS. The run time in APIs, because .NET Core is side by side, we've been able to actually take some of the APIs and enhance them and make them faster without worrying about breaking the backwards compatibility of the applications. And so by moving to .NET Core, you get our latest BCL with the latest features, performance. Because we've actually modified some of these APIs, they're just faster. We see typically about a 30% improvement when you move an app from .NET Framework to .NET Core. So those are all the great reasons to move your desktop application to Core. The next thing, as I said, .NET Core has the latest versions of all of the technologies, C-Sharp 8, one of the biggest feature-packed versions of C-Sharp in a while, brings a variety of cool features. I'm going to show a few of them here quickly, ranges. You can see under my get customer async, I pass in something and I basically can give it a range. Instead of giving it the full array, I can say, take this subset of that array and pass that into that method. Nullable reference types, this is one of my favorite features. We all have applications that we get null exceptions in, because we didn't do the right null checks. By enabling this in C-Sharp 8, it will actually force you to put the question mark next to your customer there, because it could be null and it could not be null. You can see later down there, if name not equal null, the compiler will actually enforce you to do the right null checks for it. We introduced async await years and years ago. And when we did, it could return a single type. Now with C-Sharp 8, async can return a collection, an innumerable of types. For the first time ever, you can return more than one value from an async method. So that's async streams. We got switch expressions, recursive patterns and a lot more as part of C-Sharp 8. But there's a lot of productivity improvements there. The next thing is .NET standard. .NET standard is the contract that all .NETs must implement that makes it easy to share APIs across all the .NETs. With .NET Core 3, we're introducing .NET standard 2.1. And what you see here is it's basically taking many of those new features, the index and range, the IAC innumerable span of T, which we had in the previous version of .NET Core, and making them available as part of the standard. We're adding these to the BCL types. And .NET standard 2.1 will be available across the Xamarin platform and the .NET Core platform. It will not be supported on .NET framework. And we don't expect you to move the .NET standard 2.1 right away. Maybe a year or so after .NET Core 3 is out. And we have lots of developers on .NET Core 3 will be the time. But you can see we're continuing to take the standard and improve it. Next thing, ASP.NET. .NET Core cannot just be all about desktop, .NET Core 3 can't be all about desktop. It needs to have web as well. So we have some amazing improvements in ASP.NET. We have GRPC. Today we have ASP.NET Web API for building RESTful APIs using JSON. But a lot of our customers enjoy having contracts, which tightly define the types that can be passed via an API. And because these contracts can also be binary, you get high performance. So this is giving you high performance RPC contract based APIs in .NET Core. The cool thing about GRPC is because it's a standard implementation, it works across a variety of languages. So it's supported on Java, Node, and many other platforms. This means that if you build a GRPC endpoint in your .NET Core application, you can call it from a variety of languages. At the same time, you can actually call a GRC endpoint from .NET if it's written in Java or something else as well. So it gives you full interoperability between all these platforms. Worker service. ASP.NET has always been kind of associated with UI, whether it was web forms or MVC or Razor Pages. We've had web API, but we really haven't had a great starting point for building microservices style applications. And so we're adding a worker service template. This template is for building something that might run for a long time in the background, or might listen for a message coming in from something like Azure Service Bus. We got a great template for building these types of applications that still give you all the great features of .NET Core, dependency injection, logging, and our high performance web server on the back end. The next thing is, as you're building these APIs, these web APIs, we know that one of the hardest parts is securing these things. And so we're gonna make it very easy to partner with the open source identity server project and use that technology to secure your APIs. We also have a really cool feature in ASP.NET Core 3 called Razor Components. You might have heard of this as Blazor in some of the talks we've done before. What this lets you do is build client UI in C-Sharp. You no longer have to actually depend on a library like AngularJS ReactorView. You can instead take advantage of all the capabilities of C-Sharp. For example, you can have a C-Sharp object on the server and you can pass it to the client. You get that strong type all the way across both of these things. You might ask how we do this. We can run this on the server side and have a JavaScript library on the client that actually does the interop, or even better, we have something called WebAssembly, and this is a mechanism where you can compile .NET into pretty much native IL. So when it runs in the browser, it runs at full native speed in the browser. It requires no plug-ins. All the browsers support this, the mobile browsers and the desktop browsers. And even better, this WebAssembly runs in the sandbox of the browser. So this is not like ActiveX or Flash or any of the plug-in technologies. It's safe, stays within the context of the browser, gives you that native performance. This is going to give you the ability to build awesome spy applications just using C-Sharp. So you've seen a lot of the exciting new things in .NET Core 3. .NET Core 3 will not ship as part of Visual Studio 2019. It'll ship later this year. At the Microsoft Build Conference in May, we'll actually announce the RTM date. But because you're running Visual Studio 2019, you can try the preview today without hurting any of your existing applications. So please, grab the preview, try it, and send us feedback.