 Hi, welcome to the Visual Studio for Mac. It's a fresh look at Visual Studio for Mac event. Today, we've got a whole day of fresh.NET development on a Mac. I am super excited to welcome Amanda Silver, CBP of Product for Microsoft's Developer Division. So great. Welcome. Thank you. Thanks for having me. So as part of your job at Microsoft, you look at strategic trends and bigger picture things. So what are some things that you're thinking of now? Yeah. So over the past few years, we've definitely seen increasing speed of new technologies coming out. So that means that developers have to learn all of these domain-specific tools, frameworks, and services that are specific to the solutions that they have to build, which means that while developers can build anything that they want, they don't really have the time to get really deep on the technology that they're learning. So what we need to do is to make sure that developers can become polyglots, but can basically deploy really quickly into whatever domain they actually need to develop for. That's definitely a problem as you're expected to know more and more about so many things, and you never get the time to really dig deep into things, and I need all the help I can get from my tools. Right. Exactly. So it's really important that we support developers in learning multiple programming languages and multiple frameworks, but also new domains like machine learning or other things like that. Also, every different type of solution that you build, you actually have to learn a new deployment mechanism as well. Oftentimes, that comes with a new service that you have to learn as well. So that means that you also need to learn how to design for multiple different types of user experiences, whether that's a client application, or a web application, or an IoT device, or something like that. Yeah. So what are some things that we're doing as far as tools to help with that? Yeah. So with Visual Studio, our mission is to empower every developer to build what they want to build, and to accelerate development teams. So over the past few years, the Visual Studio name has really come to mean so much more. Not only do we have the best developer environment for Windows that allows you to target mobile and IoT, and web, and Cloud, and so on and so forth. We also have introduced Visual Studio Code, which is our lightweight cross-platform code editor, as well as Visual Studio for Mac, which basically allows you to do C-Sharp and ASP.NET development on the Mac, if that's the OS of choice for you. Yeah. There's been a ton of stuff that's been added to Visual Studio for Mac over the past year especially. Yeah. Definitely. So over the past year, we've really been trying to help developers write better code much faster, and so it's important that they can focus on the code, so we've tried to make the developer environment really, really streamlined. So for example, when you start the new Visual Studio for Mac for 2019, you actually will see a new start window, and so that's really optimized to make sure that you can get to the code that you need to write faster. Then developers will also find a new search experience in the context of Visual Studio for Mac 2019, which will allow you to find everything from a single place, whether that's a hotkey or a code search kind of capability. I love that by the way, the search. When I first learned about all the, there's so many hidden features in there because you can of course search through your code, but you can also run commands, you can do all kinds of things, it's like the secret awesome tip for like. Our goal with the in-product search is to make it so that you're not just finding the thing that you need, but you can actually take action from the context of the search window so that you can really stay in the zone of the task that you're trying to achieve. The other stuff that we've been working on is really helping you to clean up and or factor the code, making that a lot easier so that it's easier for you to comply with the coding standards of your development team. Then we also really want to make sure that you spend less time doing the tedious, the menial, the repetitive tasks that developers often have to do so that you can really be focused on the code that's unique to your solution. Right. So less time like complying with things and like making the code work and more thinking about solving the problem. Exactly. Exactly. So we've also integrated Git into Visual Studio for Mac 2019, and we've also really worked to make sure that the IDE feels native to the Cocoa UI. So that if you're a Mac developer or you love living in the Mac OS that it just feels like a natural extension of the app. So kind of the best of both in terms of like the Visual Studio family of products and the quality and the features, but then also like the Mac experience integrating well with the Mac. Yes, exactly. That's our goal. But the other thing you should really do if you use this product is to customize it to make it feel yours. So whatever editor you're coming from before, you probably have some key bindings that you have muscle memory for. So one of the things that you'd want to do is to import them into this environment. Then we also have support for custom fonts and ligatures so that whatever, oftentimes I don't feel at home until I have the right background until I have exactly the font that I like to edit code with. Yeah. Sometimes it's the little things, right? When you just get things lined up and you just are happy, and with your IDE, you spend 40 hours a week maybe in there, and you really want it to be comfortable, and so that's really nice. Exactly. We think of our products as eight-hour-day products, and so we want to make sure that the ergonomics feel really natural to you. Great. Yeah. So there have been over this past year especially, I feel like the features have kind of accelerated. We've been dropping tons of new features. Yeah. Definitely we take the community's feedback to continually improve the product. So with 8.1, we introduced a new native Mac OS C-Sharp code odor, which really makes the IntelliSense so much better. It supports WordWrap and glyphs and other things like that that you'd expect from a code odor. Yeah. It's great too that that is sharing a lot of code with the Visual Studio for Windows, right? So if I've got things that I'm used to there, it's going to feel the same. Yeah. I mean, it's obviously great for our own engineering team because it actually means that they only need to work on a smaller set of code bases. But what it means for our users is that they get the features in the latest version of C-Sharp or the latest version of ASP.NET much faster than they would have previously. So over the following releases with 8.2, we continued to improve the editor, and then we also really improved the startup performance of the product so that it was much, much faster. Then with 8.3, as I said earlier, we introduced support for.NET Core 3.0 and C-Sharp 8. So with this combined code base, it's actually much easier for us to do that quickly. And great for developer teams that are also maybe working on different OSes, Windows, etc., to be able to have that same.NET Core 3.0 and C-Sharp 8 supports. Right. Exactly. It also really makes it much easier for us to support the compatibility and interoperability with the colleagues that you might have that are using Visual Studio for Windows. Right. If they're using the latest version of C-Sharp 8 language features, that you know that those are going to be able to work in the Visual Studio for Mac environment. And then we also really improved the debugger reliability and the performance of the product in that release as well. Great. Yeah. But 8.4 was probably the biggest release that we've done. Yeah. Exactly. And that introduced the support for.NET Core 3.1. Yeah. And support for server-side Blazor as well as.Razor files. And then we also supported ASP.NET project templates with authentication out of the box. Yeah. So I've done ASP.NET over the years and I love this release because with the project templates and also with the scaffolding, I can really like I can be very productive as an ASP.NET dev. And having a background more in Windows and Visual Studio for Windows, it was like, oh, this is all the stuff I know. Yeah. Exactly. It just makes it a lot easier to get started. And then we also continually focus on improving the inner loop. That edit, debug, build cycle is incredibly important. We often refer to it as a five because that's kind of the common hot key that you might use in Windows. But that's really the critical inner loop that basically determines every iteration cycle that you might take as a developer. You edit the code, you build it, and then you want to be able to debug it and see it live. So we've been working on making that much tighter. And so one of the things that we've introduced in the latest releases is XAML hot reload for Xamarin. Yeah. That's like magic watching it work. And it is like you're saying, I can make a change and see it very quickly. Right. Exactly. That's the idea. And then in 8.5, we added support for Azure Functions V3, as well as spa templates that have support for authentication built in. Yeah. And 8.5 is in preview now. And so I'm already using the previews, which is great to use these. And then we've got 8.6 coming up. Yeah. We're excited about 8.6, which will be coming in May. But in that release, we'll support Blazor for WebAssembly and GRPC, which is popular for microservices architectures today. And then we'll also support an integrated terminal. I love that. Yeah. So I mean, this just comes back to the theme that we want to make sure that developers don't have to do context switching to other windows, to other applications. The idea of a cockpit style IDE is that you have everything you need right there in that application. Yeah. I like that too because I can use built-in, say I'm using get support, but then I've got a specific get command I want to run and I just know it, I can just drop to an integrated terminal to do something. Right. Exactly. And over the past all of these releases, we continue to focus on the performance and the reliability of the product. And so if you've taken a look at Visual Studio for Mac previously and you weren't quite so happy, I think now is the time to take a second look, because we've really dramatically improved the performance and reliability. And that's part of the idea of this event, right? This timing, we're like, hey, we've done a lot over this past year, not just in features, but also in the stability, reliability, speed. We think it's a good time to take a new look at it. Yeah, exactly. So we've cut hangs by 50%. We have a 200% improvement to the responsiveness of context menus. And we've reduced unhealthy sessions, those that hang or crash or other things like that, by about 25%. And then we've improved the IntelliSense performance by 400%. That's crazy. Yeah. So it definitely feels like a much more snappy, responsive environment. Yeah. So in comparing, you've got different options you mentioned before, Visual Studio Code or some people even are using like a VM with Visual Studio for Windows. Yeah. What are some reasons why you'd want to use Visual Studio for Mac? Yeah. I mean, really it's the best C-Sharp ASP.NET code editor on the Mac. And the result of running natively in the Mac is that you get better battery life, which is super important, especially if you're a laptop cafe developer. It has the native Mac OS look and feel. And it has better integration with the Mac OS natively, which means that it has support for all of the native accessibility features and other things like that in the voiceover. Yeah, exactly. Yeah. But you also, if you're a full cockpit style IDE type of person, which most C-Sharp developers are, this really gives you that full IDE experience. It's really like an operating system for development in some ways. Yeah. Yeah. And then obviously it's optimized for.NET Core workloads. So if you're doing the latest and greatest.NET Core development, this is really the environment that's going to happen. And I think looking over those features we've released lately that makes that pretty clear, right? Like all this.NET Core 3 and C-Sharp 8 and all the ASP.NET Core and scaffolding, etc. A lot of focus on the best.NET editing experience. Exactly. That's our goal. Great. Yeah. So it's been great talking to you. As we're talking about this, all these things that we've done to make.NET developers productive, we also talked to customers and we had a great time recently talking to a customer at Ernst & Young and they've got a really cool demo and a story that they'd like to share with us. So now let's cut over to Aaron and Christos and let's hear from Ernst & Young's success. Thank you, John. Thank you, Amanda. It was a great hearing and it was a great opening to the day. It's always exciting hearing from the people actually build the product and we have a day fully lined up with some exciting and deep sessions that you can learn about building.NET apps on the Mac. But what I love more is actually getting real life stories in front of you and you can find out what other people are doing with our tools. So today we have Aaron from Ernst & Young, and he's here to talk to us about all the amazing things that they're building in their company. Thanks for coming today, Aaron. Thanks, Christos. So yeah, from Ernst & Young, we are also called EY, we're branding thing, but it means the same thing. It's a very large company, we're like 270,000 plus people, and so we build very complicated enterprise solutions over globally. So I'm in the mobile technologies team, and so what we do is we build solutions. Now mobile technology, you think it'd just be mobile, right? But it's not just mobile, we build web solutions, we build AR and VR, we're the team that leads the drone initiative at EY, most people don't know about that, and we do a HoloLens also. So we're kind of ingrained in the many different things that EY is doing right now. So we use Visual Studio for Mac for just about almost everything we build, which is a really, really kind of neat thing. I think of Visual Studio for the Mac, and like our three main pillars of what we do software development around kind of three topics I'd like to talk to you about today and kind of go through that. So one of the first ones that we talk about is this concept of frameworks. And frameworks and libraries are really important in the modern version of the .NET. If we think back to the old days of ASP.NET, right? Where you have like this solution, you have like 40 projects inside of there, then you're trying to DLL match all these things up and make sure your builds work. That's complicated and it's just not fun. With Nougat and the way that we do things moderately, we can take that shared code that we have, we can build Nougat packages out of those. And so for, I'll give you an example, like in web API, right? You have some models in your web API project, but you may want to also use those on your mobile app. That just makes logical sense, right? So why don't you pull those out and put them in a Nougat package. And then you can basically ship those both in your ASP.NET project and on your mobile app. And you're not writing that code twice, which is really kind of foreign or cut and pasting, which is where developers don't do that. So we really love that doing that. Now if you're just doing it for the Mac, you have many different ways you can build Nougat packages. You can either build them locally, which is an option, or you can have your build process, like Azure DevOps, go through and build those and push those out to the artifact server. It's flexible and it's way to do that. So we could talk about this, but I'd like to show you a demo instead. So let's just go ahead and switch over here, and hopefully the demo grimans don't kill us here. And we'll switch over to my PC, running Visual, or my Mac, running Visual Studio for Mac. And so you can see here, I have a very complicated ASP.NET Enterprise application loaded. This is our app, it's called Team Connect. And so you can see here, this is what I was talking about in ASP.NET. Here's like, if you look over here on the left side of the screen, you see all these different projects and solutions. But the one I want to focus on right now is the models project. So this is our ASP.NET models for Team Connect. And we can basically right click on here, and there's an option now for pack and publish. Those are the new NuGet integration features. So if you want to turn your DLL into a NuGet package, it's really, really easy. You basically check a box and it will turn itself into a NuGet package. And then if you want some customizations, your NuGet package, you build something called a NuSpec file. Yeah, the NuSpec file just has some things about licensing and this and that inside of it. So extremely flexible for building NuGet packages. That really I think gets down to that point where we're all trying to get to this point where we code reuse, right? Yes. And this is really critical that we build framework so we can code reuse. In fact, I'm going to show a demo a little bit later on with the mobile app where all of our developer screens are shared between all of our applications. We'll get that in a little bit. Perfect. Let's go on and talk about the next topic, which is really kind of important to me. And that's ASP.NET. We've talked about it over and over again. We heard Amanda speaking about it. ASP.NET is a first-class citizen in Visual Studio for the Mac. Yes. And it's a really great way to edit code. And so using Visual Studio for Mac as we saw earlier, you can edit your razor files, you can edit, you get the highlight, the intelligence, all those things you really love about developing in .NET. That's all there. You hit the at symbol, you got a view bag, you get a period and the stuff just happens. It shows up, the intelligence is working, it's wonderful. Now, I know what you're going to say, right? You're going to say, but wait a minute, Aaron, I can't do this right now because SQL Server doesn't run on the Mac. It does. It does with Docker. So SQL Server has ported to Linux a long time ago, a couple of years ago. That's a long time in internet terms, right? Yep. But basically, SQL Server runs in Docker and Linux. So you can run that. I haven't run it locally on this Mac right now. So your local environment with your project, very small inner loop, you go quickly. Absolutely. If I want to talk to SQL Server in Azure, I can do that, but if I want to debug locally, I also can do that. What about managing your database schema? Oh, so that's another good question. So usually, you'll say, well, there's no built-in support for that wrong. So Azure Data Studio is a new product that Microsoft ships that allows you to edit your databases. And it's really kind of the replacement for SQL Server Studio Management. That's the name of the product. And it runs on the Mac without problems. So you can connect to your database locally, you can make your changes, you can go back to Visual Studio from Mac, you can debug. We're talking about this. Why don't we show it off? Why don't we show a live debug session? So let's just go through that and try this out. Once again, demo gremlins aside, please don't scare us demo gremlins here. We're gonna actually, we'll do something that they tell you never to do in a demo. I'm gonna hit the actual run button and do a debug session. I see how that goes. Right, so it could go back. We're already debugging. Perfect. Look at that. You can see here that the window came up. If I were to go over here to my, I'm running Edge here because that's the best browser on the Mac. Absolutely. I'm gonna go to the location screen inside of this ASP.NET project. And this is ASP.NET Core. And I'm gonna edit some live data just to prove that SQL Server's running on this machine. This is an actual application that you're running on the demo. Yeah, this is a real application. I'm running locally. You can see localhost port 8080. So this is running the latest.NET Core and this is the server that's running on there. I'm gonna edit some data because why not? Why not? Right, exactly. Live coding. Live coding. This is important debugging. So I'm gonna hit the, just type the word live in here. I'm gonna go ahead and click save. And I save it. We're gonna go back and the screen should refresh in a second. And you can see now the very first location, the word Ruby and then the word live after it. So I'm live debugging on this Mac. No problems with server, SQL Server, ASP.NET. And if you have API, you can debug those live. I mean, it's amazing for developers to be able to have this kind of experience automatic. So this is kind of like our second pair. Now, of course, if I go back to our demo and we talk about, I mean, we can't have mobile technologies in our name and not talk about mobile for a few seconds, right? Absolutely, yeah. So mobile is a first-class instance. It's always been an inventory for the Mac and it continues to be. Now, we build mobile applications with kind of standard and standardized on Xamarin Forms. We find it's the fastest way to build mobile applications. Mobile applications shouldn't take longer than five or six prints to build. If you're taking a long time to build mobile applications, you're doing something wrong. Xamarin Forms cuts down in the time it takes to build mobile applications. But on top of that, as kind of top of that new package thing, you could package up a lot of your code into templates. You could reuse that code. And that's really critical for us when we have all these different types of mobile applications. We don't want to spend a bunch of time building our next mobile application. So we want to be able to up and run, like a bootstrap, sprint zero. We want to do that in a day, not a week or a month. So literally our bootstrap process for Xamarin Forms with all of our custom frameworks is 20 minutes. And you have authentication, you have in-tune support, all those kind of things. So that kind of brings up an important conversation. So mobile applications are easy, but you get to enterprise mobile applications, now it's hard. You have things like MSAL, in-tune, which is an MDM product on Microsoft's ships. And that's really kind of interesting because in-tune, over an Android for Xamarin, it has this class remapper. And so during the pile time, it changes all your classes to the in-tune version of those. Now that would be kind of scary in the old days, but with MS-Bill being pulled over to the Mac and it runs just fine, those Nuke packages, that whole remapping works out of the box. You do nothing, it just works. It brings up one more important thing, and that's key store files. So key store files are the way in Android we encrypt our applications. When we sign them, our APK files, right? Most people don't know this, but a debug build will just dynamically build a Nuke package, or excuse me, it'll build the APK and it just builds a key store file out of the loop, right? Well, with Visitor Studio for the Mac, you can custom define which key store files you wanna use for release versus debug. And that's really important for enterprise authentication where the signature from the key store file is critical to be able to make sure that your application works with authentication for things like the broker pattern in MSAL. So once again, I'd like to show you a demo of our mobile applications running. So I have one of our applications here. Now here's a pro tip, most people don't know this, but when you're on a Mac, you can actually show off your iOS screen. It's built into the operating system. It's called QuickTime. And so in QuickTime, you launch that and all you have to do is change your camera to your phone and you can demo your iOS application. So this is a real live enterprise applications our shareholders use. And this is for Germany, Switzerland, Austria. It's called the GSA region. So I have this really great mobile app. I'm gonna go in and go to the global trade just to show you that this is live. This is also using SharePoint, by the way, for its back end, which is really kind of cool. And you're using Graph API to- Graph API, yeah, Graph API, MSAL, all the check boxes basically in tune for the mobile application management. But the beauty of that is that you actually have a library that does everything for you so the developers don't need to know about that. Absolutely, they didn't have any idea how the framework worked. They just took the framework in, wrote two lines of code and they had integration. And so you can see here, I'm gonna deep link into Edge and this is running SharePoint user profile in the office SharePoint right now for this user. So it's taking a few seconds here based on Wi-Fi speed but this is literally deep linking into Edge. Now that's important because a lot of times corporations will go through and they'll share their data based on the, the browser has to automatically delete the data that's corporate if they leave the employment for example. So that's important. Security embedding into the solution as well. Absolutely, so we have deep linking into Office, we have deep linking into the Microsoft Stream which is like their streaming version of YouTube which is really neat. If you haven't seen that, it's pretty amazing. But one last thing I wanted to show you in this mobile app is if I go to the more screen, the developer options. These are shared code screens. We wrote these bonds in a framework and every app takes these in. And that's kind of critical when you're trying to debug an app and what's wrong with it. Our QA people only have to learn one way to debug application. Our developers don't have to rewrite these developer screens for every application. We built a NuGet package. They take it in, it's one line of code that say make these developer screens show up and that's just great. It also means that as we build applications, we're lowering the cost of building those. We're also reducing the time it takes to bring them to market. Absolutely. Because we have all the shared libraries that we're using and we have all these built-in theming the Xamarin form supports and stuff. So just to kind of summarize, building mobile in Xamarin on Visual Studio for Mac, it's just brilliant, it's amazing. Great. So I kind of want to just summarize what we kind of went over real quick here. And so in summary, we love Visual Studio for Mac. We love the things that the team has kind of built on. And I kind of cover some of those but I don't think people realize just how amazing the NuTelecin editor is. That thing has went from night and day. It is, it's so much faster. The debugging experience is also great. People don't know that the watch or the debug window, those are rewritten. They have this new way that you can do it. And in .NET Core especially, it is super fast. When you put a watcher in and it's almost instant, you see the results of what's in memory for that watcher. And so that's like for me, for locals and watchers, I debug complicated solutions. So I need that. I don't want it to hang or anything like that. And so in the new version, that's really, really great. The other thing is a NuGet package manager. It has been ported over from Windows. So it's the same looking experience you're used to getting in Windows now on the Mac. It's really, really easy to manage those NuGet packages and your projects. And that's important for Android developers. Because let me tell you, there's a lot of NuGet packages in Android today. Yeah, absolutely. But also the last thing is Manda brought up a really good point about parallels. I had a developer named Nick Roberts. And he basically came to me when we were starting ASP.NET saying, hey, can I do Visual Studio for Mac development? Can I use a Mac to do ASP.NET? I was like, sure, why not? And he basically said he had put parallels on his laptop and it was overheating. It was getting so hot because the fan was constantly kicking on. It's really resource-intensive, right? We just do it for Mac. It's just native, so it just works super, super fast. And we literally, the project I was showing you, that scaffolding project, that's an ASP.NET scaffolding project we did in one sprint. And it was done on the Mac first with all the scaffolding tools. So literally, that was not built in Windows, that was built all in Mac. In fact, for that particular project, they only edited it on Mac. Great. Moving forward. Perfect. It's nice to hear the love of how you guys are using our products and how productive you can be. It's fantastic hearing from you. So thank you for coming again. Thanks for sharing the stories. And we're going to go back to John and Scott, where we're going to go through some funky examples. Thank you. Awesome. Thanks a lot. That's such an amazing story. It's really cool to hear real-world examples of how this is, how the products we're building are working for you. So we've talked, first of all, to Amanda about kind of the big picture in Visual Studio for Mac as a product and what we've been doing with it lately. Heard from a customer, and now we're talking to Scott Hunter, partner director PM for Visual Studio on .NET to hear more in-depth about .NET development on a Mac. Sure. So welcome, Scott. Yeah, thank you. Let's talk about this. Obviously, the .NET journey has been kind of fun. I've been here for a while, and when I first started, we basically just had the desktop and web workloads. And you can see that over the years, we've added cloud, mobile, with Xamarin technology, gaming with Unity. We now support IoT on really small devices, and we've added a bunch of ML and AI in the last couple of years as well. I love that as a .NET developer that all of a sudden, hey, I can do all kinds of stuff. I used to just be a web developer, and now I can build games if I want or whatever. Or I've got a bunch of stuff, some .NET running on a Raspberry Pi at home, which I never would have thought the .NET framework was too big to put onto a Raspberry Pi. But so we've grown .NET to be a lot of things. The last couple of years as we released .NET Core, that's kind of the re-envisioning of .NET about being super fast, super small, cross-platform, totally open source. We've had some pretty good numbers. You can see here that in the last two or three years, we've got over a million .NET Core developers. So we're very happy about that. Stack Overflow had a survey that showed our framework.NET Core being the number one most loved framework. Super happy about that. If you look at, we are one of the highest velocity open source projects in GitHub as well, which is amazing because we were late to the open source game. C-Sharp is number five language on GitHub. Then one of my favorites is, as we started thinking about performance and really caring about that a couple of years ago, we've got .NET way up in the tech and power, which is a open source benchmark that's out there. You can see that we're seven times faster than Node.js. We're faster than a lot of tech actually. I love watching the numbers just move up on the tech and power benchmarks. It's amazing. We have some crazy customers running us at scale because of those numbers. Wow. So this is a slide with a bunch of our big customers. When I'm thinking of Visual Studio for Mac, I really think of like the UPS company. They actually, if you use the UPS app on your iOS device or your Android device, that's actually a .NET Xamarin application. Wow. So that's a cool one. Evolution Software is an example of a company that's using some of our machine learning. For some of their tech, there's a whole bunch of great companies here. Setpoint is one that's using containers on Linux with .NET Core. So you can see a variety of cool tech here like Tencent. That's a Chinese mobile app. All the payments go through a .NET Core app on the back end when you pay with your phone. So you know, .NET is in a lot of places. Yeah. Stack Overflow, what a better customer to think of than Stack Overflow. We all as developers probably go to Stack Overflow to find answers to our questions, and a lot of folks don't realize that actually is a .NET website. I love looking up answers to .NET questions on the .NET website. And they've been moving to Core, and they've been doing it for the performance reasons. A lot of folks don't realize that Stack Overflow is not run with a huge data center. It's actually a small number of machines that serve all those web requests. So performance is super important to them. So we kind of land here. We talked about all these workloads before, but I think today we're kind of here to talk about tools. And if you look over here, so no matter what those .NET workloads are, we have a great series of options, whether it's Visual Studio for Windows, Visual Studio for Mac, we're talking about today. It supports all those workloads. And of course, there's the code for just simple editing of files, and of course, everything's got to see a live first environment as well. I think it's great. We'll talk to customers that work with a lot of different, some are on Windows, some are on Mac, etc. And so it's great to have a family of products that work well together to support .NET development too. A little later on, I'm going to show a really complicated solution that actually we at inside of Microsoft, some of us use Windows, some of us use Mac, and we can both edit that entire project together no matter what device we're on. That's the cool aspect of this is, our goal with Visual Studio for Mac is you can open the same project that somebody's running on Visual Studio for Windows and swap back and forth and it just works. Wow. So let's talk about tools. Yeah. The whole point of tools is to make the development experience as fast as possible. That's the reason there is a Visual Studio to start with. And so if you look and think about this, Visual Studio for Mac supports the latest .NET Core. We just shipped out .NET Core 3.1 in early December. It's fully supported. You get the same refactoring in Visual Studio for Mac you see in the Windows tool as well. And we got full support for adding, deleting, managing your NuGet packages, all within the IDE. I also think of performance. ASP.NET applications are some of the fastest applications you can build for web. Blazor, which is one of our new web technologies for building client-side applications in a spa application without using JavaScript. Fully supported in Visual Studio for Mac. You can do that today. We're gonna show a Blazor app and I think Dan Roth and Kendra are gonna do some more later as well today. Yeah, that's the next session. And I love that as an ASP.NET developer to be able to go in and especially lately with like scaffolding and all the template support. I don't need to drop to the command line in order to do all that. Yeah, we have support for razor pages in Visual Studio for Mac. Razor pages is an evolution of ASP.NET. We've had MVC around for a long time, but for a lot of developers, MVC feels like it's too much, too heavy. It's a lot of ceremony sometimes when I really just want the view. I just want a webpage. And I think razor pages is something people should care about because Blazor is built on top of that. So if you learn razor pages, you're gonna take that knowledge with you as you go to a Blazor application except you can actually have that C-sharp code now run on the client versus run on the server all the time. And then, once again, we talk about productivity. We've always tried to make Visual Studio the best productivity environment for developers. So let's show something here. We talk about scaffolding in templates. So I've got a Visual Studio for Mac here running and I've got our project. And you and I've been doing this a long time. Building sites that show data is one of the hardest things to do just because there's a lot of ceremony involved. You have to go write the data class. You have to create the database. Then you need to go either choose razor pages or NBC and then create a view for the list of data, create the data, update the data, all those credit operations. Just recently, we added support for scaffolding in Visual Studio for Mac. So I can come over here in my data folder. I can add a new class. Let's just call that class customer. There we go. And if I'm gonna use any of the framework, it's all based on what we call PocoObjects. And so I just need to make an object that actually can be used for my database. So all I would do here is... Can you zoom in on that? I think it... Yes, I can. Mac Plus or something. Yeah, yeah. There you go. And so once again, I'm gonna use the same features I would use in VS, prop tab. I'm gonna say I wanna make that an int. I wanna make that my ID because in my database everything has to have an ID and I might do prop string. And that would be first name. And then prop string. Last name. And so I've got my object here. And then what I'm gonna do is I'm just gonna build the application real quick. And then I'm gonna go to my controller folder and I'm gonna right click and I'm gonna say add new scaffolding. And I can select down here, I want an MVC controller with views using any of the framework. I'll press next. I'll select my model class customer. I need a data context, my data context. And we would probably call this, what, a customer controller, John? Sure. And then I'm done. It's gonna go out and find the new get packages that are required to do all this. For the database access. For the database, it's gonna create my database context for me. That's the mechanism it tells any of your framework about this customer object. It's then gonna go to my views folder in a second and it's gonna go add all the views for me and I can zoom in over there as we do that. Let's wait for it to come up here. And in the past, I could do this with .NET Core on a Mac but I would need to drop to the CLI. You have to go to command line. And we wanna keep the visual and visual studio. And so this is now all, you can do all of it right directly in the product. Once again here, you can see my view folder here. I can open it up. There's now customer. All the views are created for me. Automatically, you're gonna notice it created my data context for me. At this point, I could just go run the migrations, run the application, and it will just come up. You're all set. And because it's visual studio for Mac, while you can use SQL Server in a container, this application automatically added SQLite for me as well. And so this will run as is on the Mac without installing anything else. So, part of the tools. I love that, yep. Let's go next and talk about obviously cross-platform. You know, I talked about UPS earlier. And so you can use .NET to build native iOS and Android apps. You can also use .NET to build what we call Xamarin Forms app, which is kind of the ultimate reuse where you basically build an app one time and that app can run across a variety of devices, both the iOS, Android devices, and even the Windows device. So common XAML for my UI and work across all of this. Yes. You're going to see a little bit later on. We're going to demo some of the Xamarin tech. It hooks up all the stuff for me. It puts all the emulators on. I can literally just, you know, start the application and boot it up into the Android emulator or the iOS emulator. Or I can plug a device in and easily get it running on my own device. We do all that work for you, so that's part of the cool part of the tools. And there's some new tech in here, which I might try to show, which is called Xamarin Hot Reload. And the goal here is to once again, productivity. You want to make it as fast as possible. Change your XAML. You don't have to restart the application. As soon as you press save, we update the app live running on the device or in the emulator. So as I'm modifying how my application looks, I hate having to, you know, like, how does it look? Oh, wrong color. Oops, I forgot. Oh, I misspelled that thing and it's back and forth, right? So if I can- You don't want to keep launching the device every single time you do that. You just want to go make those changes. And we have something in the future coming called Hot Restart, which also lets you make C-sharp code changes as well and have that same kind of response. Obviously, game development, this is one of the parts of .NET I think most people even realize. They don't realize that a lot of the games that you're playing on your devices are actually .NET-based games. They're running C-sharp code. Yes, they are. And so obviously Visual Studio for Mac is a great environment for building Unity games. So if anybody sees, as you're running an app, you see it show a Unity logo or something, realize that it's actually probably built either in some form of Visual Studio on a device. It's fun talking sometimes to younger coders and like my kids, they want to build a game. It's like, hey, you can do that and we'll sit and we'll build a Unity game. It's really cool to use C-sharp skills to do that. Yes. And then obviously cloud development. So, cloud is a big part of web applications today, I think. Yeah. So, we have great support inside of Visual Studio for Mac for building cloud-based applications. It's very easy to publish to Azure. It's actually very easy to right-click and add Docker support to an application. Then you can run it locally on Docker and then you can publish those containers to the cloud as well. So we've got a great, in fact, let's just jump back to that app we were just showing before. I can right-click on the app and I can come over here and say add and there's add Docker support. Just built right in. Built right in. I add that. So I don't need to spend the time going out, look up the docs. Oops, I forgot how to set up my Docker file and all that. I can just right-click and add the Docker. You right-click, add Docker support, we'll add the Docker file for you and we'll also do all the magic as well so when you actually run the app inside of Visual Studio for Mac, it will actually launch the app in the container. So even though I'm on the Mac, I can actually be debugging inside of a Linux container on the Mac, which is pretty cool. So you can decide to either launch it in the container or launch it locally on the device. But it means you can actually debug in the same environment you're gonna run in production on Linux in a cloud. And you mentioned cloud, there's all the different things. Functions is pretty cool. And we've got a session later today, Jeff's gonna be showing us some functions. Great support for functions. You can basically build a functions app right in Visual Studio for Mac. You can run it locally. To me, that's the coolest part about functions is we bring an emulator down and you actually are running functions locally on your machine and then when you're ready you can publish them up to the cloud. And you said, Jeff Holland's gonna come and show that. Yeah, yeah. Cool. Okay, so let's talk about .NET Core a little bit. We just shipped .NET Core 3.1 in like the first week of December. And this is what we call our long-term support version of .NET. So this will be the version of Core that you can use for the next three years while you're kind of watching what we're gonna do in .NET 5. It's our long-term support version and we added a bunch of huge functionalities in there. And even though we're talking about Macs today, it does add support for our Windows desktop features. So WinForms and WPF are there. A feature I really like, it's the beginning of a journey we're taking where you can make a .NET application and you can check a box or open your CS project file and edit it and tell us to make a single exe for you. So we'll take your Core app, we'll take the parts of Core that you're using, put them all into the application and give you a single exe that you can copy to any machine without having any .NET Core on the machine at all. Single file. Yes, totally single file. We obviously ship Blazor. I know Dan's gonna come talk about that next. Yeah, that's next. And there's full support for Blazor inside of Visual Studio for Mac. But the big thing Blazor is, all the web apps you go to today feel like they're kind of spa, which means they kind of have that native feel. There's a bunch of code running on the client. Now you can do that all in C-Sharp. And of course we're always adding new features to C-Sharp and so C-Sharp 8's out there and we fully support that. Microservices, this is a big aspect of when we talk about web and .NET, where we should be going. And so the things you think about today when you think of microservices is, imagine we've all built these huge monolithic applications. Most of our customers today want to actually break those apps into a few smaller pieces. So those teams can iterate a little faster. So take the big app, break it into two or three pieces, not 30 pieces. Yeah. And then let those three teams kind of all work at their own pace. You know, it was great in September, I went and visited a customer and they had done exactly that and it was so cool to hear how well it was working for them. Before they had one big team and it was complicated and all these dependencies and by breaking into microservices, they were able to focus on one key deliverable and accelerate their development and also reduce all the mental overload of, oh, if I touch this code, it'll affect this. It's just one mini application. Yeah. Most teams actually will switch to modern DevOps and do this at the same time. So it's what we see. And we obviously have great support for doing this both inside of Visual Studio for Mac and .NET Core and Azure with Azure Community Service is a great way to run your .NET apps in containers in the cloud. So let's talk about what we added new in ASP.NET Core 3. First off, GRPC. Most people are probably familiar with things like WCF and they might ask, well, why are you doing GRPC and not WCF? Right. GRPC to us is if you wanna have contract-based messaging between your application, that means you wanna have typed messaging using strong types. WCF was great tech, love it, but it was .NET only. Yeah. GRPC is a newer flavor of the same kind of tech, but it's cross-platform. So you can build a GRPC service in .NET Core and call it from Java. Or vice versa, you could have a Java GRPC service and you could call it from CCHAR. And there's already GRPC services out there on all these different platforms and now I can interoperate with them from .NET Core. Yeah. So we built that in as a new feature. There's tools both on the command line and in the IDEs to do this. Worker service, we talked about microservices. Well, we're trying to figure out ways to help our developers build microservice applications. So we have this new template called a worker service. It's in Visual Studio from Act Today. And it lets you build a long-running process that might sit there and pull something from a queue and I'll show a demo of that in a second. And then obviously there's, you have APIs. We're always gonna support RESTful APIs. How do you secure those? Yeah. That's hard to do right. Yeah, so we had better support for securing those in .NET Core 3 as well. So let's jump over here real quick and show an application. This app is actually a pretty cool app. This is the same app we showed at .NET Conf last September. I love that. So those demos were all in Visual Studio for Windows. They were all in Visual Studio for Windows. And so this, when you look at this, this is a complicated solution. Notice I've got a Blazor app. I have some machine learning. I've got a server. I've got some Xamarin. I have pretty much everything you could think of in this one application. And once again, I can take this entire solution, load it up in Visual Studio for Mac. It'll build and run. I can take the same solution and have somebody else like yourself load it up in Visual Studio for Windows and it will all load and work. And that's the goal of these tools is to let developers choose the device they want and interoperate across the boundaries. So let's look at the server app just real quick. You see a lot of stuff in here, but I wanna highlight a couple of the points that we talked about. One is this does support GRPC. So inside of here, it's messaging and because it's cross-platform, this is how we identify the two methods we're gonna have as we're gonna expose. And then here's the type of the response. You define this in a format that's unique across all the languages. And then our tools, our CS Proj, the MS Build will actually go and build all the C-sharp parts of this for you. So you don't have to worry about this. You build this and then we build all the glue for you and you just implement the methods. To call those services. And you're good to go. So this is actually, also this app is actually a worker service. So if I load it in here, you can see this is a worker. This is that new type of app we just talked about that we have done at Core 3. And you can see it's basically got a method called execute async. This is the long running method. And you can see it's like, while I'm not told to stop, run. And in this case, what we did is it's a microservice that goes out to AccuWeather, calls their URI, grabs the weather, caches it. Because you can only call AccuWeather so many times per hour, per minute, so we then cache it. And then we expose a GRPC and a REST endpoint for that. This is an awesome feature of VS from Mac that we don't have in VS for Windows. I can go to tools and I can say open in terminal and we'll just go and open you a terminal right in the folder of the app. And I can do a .NET run. And now my microservice is gonna boot up and start running. Now this is not super exciting. We're gonna go back to slides for a second and we'll come back and we'll show some clients that run against this. Let me go back here. Next is C-Sharp. Visual Studio from Mac supports the latest C-Sharp eight. We added some really cool features. One of them is nullable. It'll take a while for it to go all the way through the new get framework and all that kind of stuff. But it's a feature designed around making sure that you actually put null checks in your code. So that's a great feature. Another one that I'm really a fan of is something called async streams. We've had iNumerable forever, but we never had an async version of it. Now there's an async version of it. So I can basically await in a loop and keep going and as fast as we wanna go. And then obviously there's a whole bunch of other features around using patterns and read-only members and stuff like that. There's a whole pile of just Google C-Sharp eight and you're gonna find a lot of cool stuff all supported on the Mac. Mobile apps with Xamarin. This is a big thing that we talk about is all those .NET workloads, we can build mobile apps with Xamarin. So native performance. You can basically call all the native APIs on those platforms. We have a really cool library called Xamarin Essentials, which actually lets you not have to go, if you write an app, you can actually call the GPS locator from Xamarin Essentials and it will do all the mapping to the right native code for you based on the platform you run on. So I can write that, I can say, I just want GPS, you figure out the... Figure out the thing for me. Yeah, exactly. But you can build native apps with C-Sharp for both the platforms. You can also run Xamarin Forms where you build a single app that runs on both the platforms. Xamarin Essentials is used to kind of like make it easy to call those native APIs, but not have to if depth your code in all the places. And then of course, it's all free and open source like the rest of .NET. Yep. And so I thought what we'd do real quick is jump back to this application and hopefully my server is running. It is running good. And now what I can do is I can go here's my Xamarin project and inside of it you're gonna see that I've got mobile core and that basically is the most of the logic of the application. That's your shared code. That's the shared code. That's the whole point of Xamarin is if you're gonna build both an iOS and an Android app, best if you share the code as much as you can between the two. And then I've got an Android and an iOS version. I can take one of these, set it as my startup project and I can say restart without debugging. And we will fire up the emulator, launch the application and this is gonna be a Xamarin forms app that basically calls that same weather end point that we showed before. So now you see it running on my Android device on my local machine here. Running against that GRPC service. Running against that service that we just built. I'm gonna close that out and I'm gonna switch to the iOS and we'll show one more thing there. Let's close the server here. And I'll start the iOS as the startup project and when we do that what I'm gonna do is I'm also gonna open up this core project here. And this is the one that contains all the shared stuff between the applications. So here is, let's go here. Here's some XAML. Yep. And let's first just launch the application. So I'm gonna say start with debugging. It's gonna say I'm already running so let's close down the Android app. We'll boot up the iOS app, give it a second here. And then what we'll do is we can show that hot reload feature that we talked about before which is that's why we got the XAML here. And we're at about time so once we get that. We can jump fast, see it coming. While we're waiting for the emulator to come up, why don't we jump back and finish the slides real quick. Web apps with Blazor, Dan and Kendra are gonna show this next so I'll skip through this but it tries to take my machine back over. The idea here is you can build awesome client-set applications without having to use a third-party library like Angular Reactor View. But you get the strong type of C-sharp, you get the single tool chain. We don't version as fast as those people are so let's you stay kind of in sync faster. We'll skip that demo. Machine learning, ML.net is a part of .NET and the goal here is if you're a .NET customer you shouldn't have to use different technology to do machine learning. So yeah, so if I've got a .NET application I can add machine learning to my application pretty quickly without learning a whole new language and tool set. Exactly and we have a really cool feature called Model Builder, it's UI that you can actually go through a wizard and we'll build a model for you and you can just add the model to your project. And maybe I'll show a really quick demo. ML.net 1.4 is our current version of this and we'll have more exciting stuff in the build time frame in May around that. Here's the next agenda, I'll talk to that. Yeah, yeah, well so we've got a full day, we've got next is Blazor and then we're just digging into all those different workloads we were talking about. So like there's web development, there's serverless, there's games and mobile and so we're just gonna dig into those throughout the day and then we're gonna end up with a code party at the end where Jeff and I are gonna be giving away a lot of cool free swag and t-shirts and coffee mugs and all kinds of stuff. So I'm gonna close the, it stopped at a break point. I'm gonna close that demo real quick and I'm gonna go just real quick, open up the Blazor demo and we'll run it real quick and then we can go to the next folks. So this is the Blazor running against that same GRPC backend server? Exactly. And one of the cool aspects of that is the Blazor app also has machine learning inside of it. So against the kind of the theme here is weather. So you can see us showing the weather and if I zoom in here, you can see it's updating every two seconds. It's doing a GRPC await loop to call that weather but down here you see these pictures of Century League Field and it says it's sunny. If I show Paramount Theater, notice there was a pause and it showed it was rainy. There's a pause, it shows that it's a sunset. That's using ML.net to take images and throw them at the ML.net and it tells you what it thinks it is. Wow. So this is a model that we built and everything I'm showing all these samples, they will be available after the event today. Yep. So let's quickly jump back to your slides. Yeah. And yeah, so thanks a bunch for digging into all the .net stuff. Yeah, so we've got a full day. We're gonna be going to Blazor next and so here's your next stuff. Download Visual Studio for Mac and then we've got a series of 101 videos. You can check out today and we also have some great learning material and with Mac tutorials where you can dig right in. So thanks a lot, Scott. I think we can hop right over to the Blazor show.