 Hi, welcome to Visual Studio Toolbox. I'm your host Robert Green and we are having a special episode today. We are celebrating a number of milestones. Number one is the release of Visual Studio 2017, which launched on March 7th and is available. Two, it is the 20th birthday of Visual Studio. That's right. The first version of Visual Studio was Visual Studio 97. That was in 1997. So that was 20 years ago. Three, it's the 15th birthday of the.NET framework, which first appeared in 2002. That's when Visual Studio.NET appeared, not coincidentally. The fourth thing we're celebrating today, another milestone is this is episode 200 of this show. That's right. I've been doing this show since, let's go back and look, May 11th, 2011. We've made tremendous enhancements in the show. We've gotten better, particularly at picking the pictures that we use. Look at that. That is awful. So 200 episodes of the show, new version of Visual Studio, 20th birthday of Visual Studio, 15th birthday of.NET, a lot to celebrate. So I figured what I would do in this show is take you on a whirlwind tour of Visual Studio 2017 and show off some of the new features. Now, there's a lot of material out there on 2017. We did a two-day launch event. So there's keynotes, there were demos, and then there are a number of additional videos that are available there. So if you have watched all of those, and you've read all of the blog posts, then you probably won't see a lot new because that's where I got a lot of my demos from. But I'm assuming that you haven't necessarily watched all the videos or read all the blog posts. I'll link to them in the show notes. So if you haven't, then I think you'll see a lot of things in the latest version of Visual Studio that you'll like. So that's what we're going to do. We're going to do a tour of the product. We're actually going to start with installation, which is bizarre because when was the last time we started a, let's look at what's new in the product by launching setup. But we've made dramatic changes in the way that you install Visual Studio. We heard loud and clear that setup was a very long process and it was very difficult to identify which pieces of the product you wanted to install. I don't want to do C++ or I'm a web developer, why do I need to install WinForms or I don't do web stuff, why do I need to install that? So what we've done in the product is we've done a couple of things. One, we've made it a lot easier to install just the pieces you want. We've also enabled, for the first time ever, side-by-side installation. So you could have Enterprise and Community and Pro on the same machine at the same time if you have the disk space. I'll get to that in a moment. So let's say I wanted to install Visual Studio Community. I go to install and the first thing that shows up are the workloads and workloads or components that give you the ability to do certain types of development. So for example, I could choose to install the UWP development, Universal Windows Platform or here's ASP.NET and web development. Here's desktop development. So I'm going to check that. And then if I also want to do Node or Xamarin, that's mobile development with .NET or game development with Unity, we've broken things down into a number of workloads. Here's .NET Core, if you're doing .NET Core, ASP.NET Core, et cetera. So you can choose just the pieces you want. Then we'll show you what the install size is going to be. And then a couple of things you should look at are optional components because again, not everything is installed. You have the ability to then ask for additional things. So maybe I want F-sharp installed because that's not installed by default with the desktop development workload. Then what you can also do is go into individual components and then choose from a long list here. We don't have searching in here yet. Hopefully that'll show up fairly soon. So you can install additional things. For example, the GitHub extension for Visual Studio. So if you want GitHub integration inside Visual Studio, this does not get installed by default. So you'd probably want to install that. Then if you're going to have multiple versions of the product on your machine at the same time, you have the ability to give things an installation nickname, which I highly recommend. Because if I now installed Visual Studio Community Edition, then in the start menu I'd have Visual Studio 2017, which is my enterprise. And then I'd have Visual Studio 2017 parentheses two, which is my community edition. So you should give it an installation nickname of something like community so you can tell the difference on the start menu. Okay, so now you install that and where does everything go? Program files, x86, Microsoft Visual Studio 2017. And here's the directory for enterprise. There would also be a directory for community right next to that. And if we look inside here, we see it's pretty much everything. Here's common seven, IDE. Notice that the public assemblies are no longer installed in the GAC. They are laid down on the disk. This makes it really easy to have multiple versions side by side. And if you wanted to, you could update them on different cadences. The downside to this of course is it takes up additional disk space. So if you want multiple versions, be really good if you're book authoring or if you want to do a blog post and make sure that you don't include any of the enterprise features, you could have the additional versions in there or you can just stick to one version. In my case, I've got Visual Studio Enterprise installed. Okay, so now we launched the project and one of the first things we'll see is the new start page. We've got a redesigned start page where we make it a little bit easier for you to get started with your applications. There's a getting started section. Then of course there's the recent projects. We now have the ability to pin a project. So if you're going to be using a project over and over and over again, you can pin it and then it won't disappear. And then instead of just recent, here are the things I worked on today. Here are the things I worked on this week. I can pin this and escalate it up into the pinned. I can of course unpin. Of course, they have the ability to do a new project. Couple ways you can do a new project. You can of course control shift in or click new project and get the traditional dialogue where we show everything. And then if you want to find a particular project, you can go looking around or we'll show you the recent project templates you've used. So here's an MRU of project templates or you can go searching. So let's say I want to do an iOS watch template. I don't really know where that is. I just type watch and I can do a blank app watch iOS. And this calls up the new project dialogue goes straight there. So I also of course learn where this project is located. So that makes it a lot easier to start with a new project or of course use the recent project templates. I can open a project or a solution, a website. We now have the ability to open a folder. So that's a lot of people doing web applications do that. So I can directly open a folder and then I can open directly from source control whether it's Visual Studio Team Services or GitHub. Now this choice to open a GitHub repo will only be here if you installed the GitHub extension which is not necessarily installed by default. So again, go into the installation. So if we did something like that we'd go into the Visual Studio installer and then choose modify on enterprise which is the release I have. And then I can either locate it under individual components here or go into the individual components tab and go find it. Okay. So now when I have that I can connect directly to my GitHub repositories. It cracks me up that mine is always the last one that shows up. Here's Azure Readiness. Here's James Montemagno because I follow his stuff on GitHub. Here's a Microsoft repository that I belong to. And then if I wait long enough then my repos will eventually show up. Not 100% sure why it takes so long for mine to show up but there they are. And here are my GitHub repos so I could connect directly to one of these and clone. These are disabled because I already cloned them earlier when practicing but I could clone this right from here. That's pretty cool. Okay. So let's open up a solution. We'll do some demos. This is a solution. If you've seen me talk you've seen me use this project over and over and over again. It is a WPF application that talks to a WCF service that talks to a SQL Server database. So it's my canonical WPF internal line of business application project. Okay. So let's collapse some things. Let me show you this again. Let me close the solution. Let me open it. And then watch as each project loads initializing loading. Now this is a fairly small project. It's fairly small solution with only three projects. It didn't take that long but you could see that it was taking time for each project to open. Imagine that I had 27 projects in here or maybe it's a Xamarin project which has a Xamarin solution which has a Mac project which takes a while to load because it's checking to see if I have a Mac which I don't have or UWP which also takes time to load. It can take time for all of those projects to load so you can get started working on it. Well, there's something we can do about that. We can go into tools options. We can go to projects and solutions and we can turn on. There it is. Lightweight solution load for all solutions. Okay, and now let's close this. Reopen the solution, ready to go. Now none of the projects have loaded yet but I'm ready to go and open the project that I wanna work on and the other ones don't open. So the nice thing about lightweight solution load is the solution loads with nothing loaded, none of the projects loaded and then you can just load the ones you want as you work on them which could potentially save you a fair amount of time on solution load. Now there are a couple things. If there's something in Visual Studio that requires the project to be open, then we'll have to open the projects but things like renaming, refactoring, searching, we can just look through the files on the disk and we don't have to load the project to do those types of things. Okay, now the start page by the way has moved. It's now under file. So I can get it back by going to file start page. Used to be under view, now it's under file. Okay, so now let's look at some of the enhancements in Visual Studio that help you code. Every single version of Visual Studio ever released has provided a number of tools that make it better and more productive for you to do your coding. So we're gonna take a look at a few of the things that are in here now. So for that I need to open this project and I go to one of the view models. This is charges view model and I'm gonna come down to the constructor and let's look at IntelliSense filtering. So if I type this dot, there's a decent sized list here. There's a number of things here. I've got fields, I've got properties, I've got methods, I've got all kinds of things but maybe I just wanna be able to filter on those. So I'm gonna type this dot and notice these little icons down here. I can just look at the properties or I can also look at the events or just the events. I can look at the fields, I can look at the methods and there are keyboard shortcuts that do all of these. Alt-M, Alt-V, Alt-P, Alt-F, P, M, et cetera. So if I just wanna look at events, oops, I was aiming for the Alt key there. Alt-V will just scope that down to events. Now if I type this dot V, we go to the first V and you can see that the Vs are capitalized. We're doing some match highlighting here and what's really cool about this is if I type capital V, capital C, then we'll do camel case matching and get me directly down to view charge. So if you ever have something with a get and 27 get methods, you've got get employee, get charge, get report, et cetera, et cetera. You could type capital G, capital R or P or V or whatever and scope down to only those methods. So it makes it much faster to find things. That's pretty cool. We're also trying to get cleverer about what shows up in the IntelliSense. So if I say this dot C, notice that charges is now highlighted because it's obviously the first thing there. I type to C, there's one thing that starts with a C. So charges is highlighted, now I can press dot and continue on whereas before I would have to hit tab and then the dot. So that seems like a minor thing but you wind up doing that six or seven thousand times that's really gonna add up to be very, very cool. Okay. In 2015, Visual Studio 2015, we introduced a number of refactorings because remember, we rewrote the compilers that is the famous, yes I know, I'm in the studio. I love it when I get a notification for meeting them already at. Okay, so remember in Visual Studio 2015, we added a number of refactorings and things that are going on in the compiler. We rewrote the compilers, this is Project Roslin, so that the compiler is working in the background to give you tips. So for example here, we're getting one, I can remove the this qualifier because it's not needed. We had a bunch of refactorings in the previous version and we've added some additional ones. So let's take a look at those. So I'm going to go to a method called saveChargesAsync. And what I'm going to do is loop through all of the charges, create a new instance of the charge class, fill out a bunch of properties and then update the charges by passing that in. Now there's absolutely nothing wrong with this code. It's readable, it works perfectly, but you might be looking and saying, well, wait a minute, there's better ways to do that because you could write the code that looks like this, create a new charge and then instantiate that and fill in all the properties at the same time, you could save yourself some typing. So notice there's nothing wrong with this, we're not flashing error messages, there's no light bulbs showing up, but there is in here three dots under, well actually it's more than three, it's five dots under new because we're very subtly telling you, you know, there is something you can do here and so if I now click on that, you can simplify the object initialization by changing it to this. Okay, so I say, yeah, all right, let's do that, preview the changes, let's apply that and Visual Studio will change that code for me. So this is a perfect example of things that could be made better in your code, the way that you could improve your code, it's not worth putting a squiggly under there, it's not worth jumping in your face and flashing up a light bulb with all of these compiler things going on and the tool tips, we're trying to be very clever about when we get in your face, if you make an error, we should put a red squiggly there and get in your face. If it's just a tip or suggestion, you know, I don't necessarily want Visual Studio to constantly be interrupting me because I could make a minor improvement, but it is nice when Visual Studio alerts me that there's something that can be done there. So we added that very subtle thing in with the object initialization. We've also added one with some of the C-sharp features, C-sharp six features, excuse me. For example, convert to interpolated string. So I'm going to create a message and I'm going to pass in today. Again, nothing at all wrong with this, but I'm using string format and what we introduced in C-sharp six was the ability to do a string interpolation where all I have to do is put a dollar sign there and then I can directly stick in system.datetime.today instead of having to do the zero and then the argument that goes in and lose track of that. So again, there's nothing necessarily telling me but if I highlight over this then I get a tool tip and then the quick action is you can convert to interpolated string. So I'm going to do that, okay? So that's built in. All right, let's go to the data project here and in the models folder, let's add a new class and I'm going to call it person. So I want to add a person class. And then I immediately remember, oh wait, these things are supposed to be DB person. So I can come out to the solution explorer, right click on this and rename and I've always had the ability to change to DB person and then Visual Studio says, oh, you renamed the name of the file, would you like to rename the name of the class? And I say yes and it changes to DB person. What we have now added is let's say I changed my mind and I set that back to person. Now I get a tool tip that says, would you like to rename the file to person? And there I can say yes, of course I can keep them different but I can synchronize type names and file names both directions now instead of just unidirectionally. Okay, so we've got person in here. All right, so we looked earlier and this is a kind of a good example of code style. So the style here is that I'm using this or the style is that I'm using var. I don't have to use var. Me personally, I love var because I've never been a big fan of having to type a type name twice, right? Some giant class name that I don't really know how to use, thing equals new, some giant class name that I don't really know how to use yet, right? I like to be able to say var and I like to even better, I like to spell it right. Okay, so what can I do about this? What can I do to enforce my particular code style? Well, I'm going to go into the quick launch and I'm going to look for code styles and in the options, we list a number of code styles. For examples, do we have a preference for using this? What's our preference for using var? Under formatting, in general, how do you want to format indentations? Where do I want the braces, new lines? Do I want my opening brace on a new line for types or methods? There's a whole bunch of things that I can choose from here and in the bottom here, we show you exactly what it's going to look like, the default and if you change it. So let's go back to the general, this. I want to get serious. I don't want to use this ever but I don't want to be really bad about it so I'm just going to say this is a warning. I just want to be warned when I use this because I really want to force myself to clean that up and then for vars, I'm just going to get really hardcore about it and I'm going to say always need to use var and if you don't, it's an error. Now, I don't necessarily recommend that you do this in real life although it would make a pretty fun April Fool's prank. Okay, exit out of here, no changes yet because I have discovered that sometimes you have to close the file and then reopen it and now I'm getting warnings under every use of this and if I do something like this, let's see what happens if I do string message three equals hello, all right, yep. I can use var instead of an explicit type. I'm going to get an error there or if I say charge, charge two equals new charge, all right, I'm going to get an error there because I'm not making this a var. So you have the ability in the code styles to really get specific about things. Now, again, I'm just going to set this, I'm going to set this to a warning because I do want to train myself. I use var quite a bit but I just want this to tell me that things are warnings. I'll leave these things at warnings, okay. Now, if I build this, when does it go in effect? He asks. All right, so the compiler has now built this, the squigglies show up. So there is a bit of a lag sometimes between when things appear. I think if I left it there for a while, next time the compiler runs in the background it would update. So using the styles, you can control a large number of things particularly around in the use of these styles and these use of coding conventions. So you could decide for yourself or for your team, these are the way, this is the way we want to code. Now, these are set at the visual studio level at the moment. So what if I wanted to share those, literally share these types of things across multiple users or I wanted certain styles to work in some projects but not necessarily others. So there is a way you can do that and that's by using a .editor config file, .editor config it's an open source file format that helps you with formatting and code style conventions and we have support for it in visual studio. So let's look at an example. So right now, let's say we go into dbcharge for example and when I press tab, what am I getting? Well, let's see, let's go to tabs in C sharp and when I hit tab, I'm inserting spaces. Now there is a way to see this. I can look for white space. I guess I can't do it from there. I gotta do it from out here. White space, nope. Oh, I typed it in the wrong place. Duh, let's go into the quick launch. Type white space, nope. Where is white spaces? Oh, the problem is it's multiple words. White space, there we go. Okay, turn that on and I can see that when I press tab, I'm getting spaces. Well, I've decided that in this particular project, I wanna see tabs when I press tab. Now again, if I come up to the options dialog and set use tabs instead of spaces when I press tab, that's gonna be for all the Visual Studio. So in order to make this change only for this particular project, I can use a .edit config file, .editor config. So I'm gonna add to this project a new item. It's gonna be a text file. Where is text file? There we go, and I'm going to call it .editor config, okay. So I have not played around with .editor config a lot, so I'm going to do a very, very rudimentary version of this. There is documentation on it. I'll put a link for that in the show notes where we talk in much greater detail about the types of things you can do. And I'm going to say root equals true, and then I'm going to say for cs files, star.cs, yep, then indent tab, oops, indent style equals tab, okay. That's all I need to do. Save. All right, let's save all. Now I do believe you have to close and reopen the solution for this to take effect. So let's close this, let's reopen it. So now if I go into any of the files in this project and press tab, I'm gonna be using tabs. If I go into any of the files in the other projects and press tab, I get spaces. And because this is now part of the project, I can check that into source control and make sure that everybody uses it, okay. So that is dot editor config. I'm going to turn off white space because although it's great for this demo, it drives me crazy to watch. And why, why does that not show up? Edit, advanced, view white space. Maybe I'll just learn control R, control W and be done with it. Alrighty, let's look at navigation. We used to call this go to, but I'm sorry, used to be known as navigate to. Now we've renamed it go to because in talking to a bunch of developers, we discover that people go to places in their code. They don't necessarily navigate to places in their code. So control T will pop up the go to dialogue and in line of course. And I want to look for charges. So I type CHAR, let's magnify that so we can see what's going on. And I see all of the things in my solution that start with char. Now again, I want to be able to filter these. So maybe I just want to look for a particular line or particular files or the types or the members. And notice that when I select type, if I get a T here, member gives me an M, symbols gives me a pound. So if I, for example, wanted to do types, I could come in here directly and type CHAR. And then I would look at the types that start with the CHAR that automatically selects that. There are keyboard shortcuts for each of these. So if I go to edit, go to, here are all the keyboard shortcuts. Okay. Now, as I scroll through this, and let's get out of magnifying mode to see that, as I scroll through these, I'm either going to go to that line in that file or if it's in a different file, then that gets opened up in preview mode. Which is kind of cool. So I can see, of course, if I press enter, I'll go directly to it. And if I press the gear to show settings, I can center the window, show details. I can choose whether or not to use the preview tab. I can turn that on or off. Okay. Then, next thing I want to look at is find all references. So let's go to the DB Charge class. So I want to see everywhere where this is used, where to go, there it is. So I'm on that, I right click and, or shift F12 and I find all references. And notice that we've improved this quite a bit. We're now not only showing all of these, but also giving the ability to group by them. I can group by project, then definition. I can group by definition only. If I right click over here to the right, then I can show additional column. So I added a file, I believe. Oh, that was already in there. I can also, I'm sorry, I can change the groupings. So I can group by definition. I can group by file. Yes, and I added, yeah, pretty sure I added one of these, kind of forget. So project, then definition. There's multiple ways to group these, definition, then path. So we've dramatically expanded this. Now, if I wanna keep this around and then do another search, I can keep the results. Let's move this off to the side. And then let's do a find all references on employee ID. So I can find references for multiple things at the same time and kind of save those results. All right, that's good. All right, so now let's come back into here. Have you ever scrolled down in a method and you're looking at something and you don't remember where the various pieces are? Notice that we now have these dotted lines and this is called the structure visualizer. And if you hover over that, it will show you the structure of your code. So for example, what does this brace go to? This brace goes to the for each. And this brace then goes to the async. This brace goes to save charges async method. This one probably goes to the class, which means this one must be the namespace. So no longer do you have to scroll up and try and figure out where in your code you are you can turn on or of course you can turn them off. These structure visualizers. There is a option under text editor general to where is it? Text editor general. There it is. Show structure guidelines. So you can turn it off if you don't want it. All right, let's take a little look at debugging. So let's put, let's come up here and put a break point right here. And then let's run this. Okay, what it's going to do is it's going to spin up the WCF service and then it's going to open the WPF project and it should hit that break point. Of course not. All right, let's set a different break point. Okay, let's go into the main window view model and there is a method in here called show charges. Pretty sure this is the first code that runs. So I'll put a break point there. Now I'm pretty sure I'll hit the break point. There we go, perfect. Okay, so now let's say I want to come down to, for example, this line of code. Well, I've always had the ability to right click and then scroll down here and run to cursor or I could set next statement. I could also do keyboard shortcuts but that's potentially a bit of a context switch. I'm staring at my code here. I'm trying to think about what's going on and I would just want to come down to here without having to right click, roll my hand over, search through the menus. What I can do now is notice that next to every line there is this glyph and this is called run to click. So if I click this, then I immediately run to that point then I can click this and immediately run to that point. Again, this is one of those things that appears to be very minor but if you think about it as you're debugging over and over and over again and moving from line to line to line, how much easier is it to just click, especially if you're skipping over multiple lines and having to right click, hope you clicked on the right line and then locate run to cursor. So that's a relatively minor enhancement but one that's going to add up over time. Okay, so now let's look at another debugging tool. This one's the new exception helper. So I'm going to come up to where is it? The WCF service and get outstanding charges for employee. We look by employee ID. So what I'm going to do is purposefully break the code by entering an employee that doesn't exist. Okay, so now let's run this. Boom, blows up and it blows up because I told it to blow up. Okay, so here's the new exception helper. All right, so the entire line of code is highlighted. The pop-up is smaller, it is non-modal, it's less destructive. It shows the exception type and the error message and whether it was thrown or not thrown but there's additional information that I can see. I can click to view details and then I can set a watch on things. I can copy the details. I can go into the exception settings. All right, choose one this is thrown and I can also open the exception settings and decide what gets caught and what doesn't get caught. I can also edit the conditions from in here. So much more information, much better, giving it much better at giving you the ability to handle exceptions. And I got to remember in here to take out all of the code that I added that breaks this. Okay, so now let's take a look at a feature. I think this is probably my favorite feature. Certainly one of them and that's live unit testing. So I'm going to open up the live unit testing demo which is just a very, very simple console application. All right, it's gonna do some math. We're gonna add, we're gonna subtract, that's all. All right, so I put in the program. This would always help if I put this outside the class file. There we go. So I'm adding to this a class called My Math and something that we do all the time is inside a program we'll add multiple classes. And then of course at some point you might want to separate these out. So now when I click on this, I get a light bulb that says move type to mymath.cs. I'll say yes, thank you very much. Okay, all right, so now if I go to My Math. Okay, I can right click on My Math and let's create unit tests. Now I can choose the frameworks for what I'm going to do. I want to make sure I choose mstestsv2. I put it in a new project, otherwise I'll accept all the defaults. And then we're gonna create unit tests and in my add test method, I'm going to save our result equals My Math.add2 and 5. And then I'm going to assert.isTrue that seven is what this returns. Okay, so and good. And I'm gonna leave the subtest not filled out yet. All right, so build this. Great, now I've got this super-duper calculator. I've got this amazingly awesome unit test. I'm good to go. Now I can go to test windows and call up the test explorer and here are my tests and I can remember to run all my tests. I of course set up continuous integration and make sure that they get run automatically. But I'll just remember to run things from inside Visual Studio, add test work, subtest fails because I haven't done anything yet. All right, perfect. Now I go back to My Math and I make a change to this code. I've now broken my test, right? Of course, if I come into the test explorer and rerun my test, it will fail. But wouldn't it be nice if I could be told right now, hey dude, you have just written code that's going to break one of your tests. And the way we do that is through a feature called live unit testing. Now to have live unit testing, you have to add a couple Nougat packages. So I'm going to right click here and I'm going to manage Nougat packages and I am going to browse for MS test and I'm going to add MS test test framework and MS test dot test adapter, okay? Now I should say that live unit testing works not only with MS test, but also N unit and X unit. But I'm using MS test here. So I'm going to add the test framework, Nougat package. Then I'm going to add test adapter, okay? Worked, cool. Close that, all right? So far nothing works, but watch. If I go to test, live unit testing and I start, watch what happens. In the background, the compiler is running my unit test for me and it tells me right now that this test is going to fail. Notice if I look over in the test explorer, that test is now marked as having failed. So the compiler will run my unit test for me and it tells me that this code is not covered by a test because of course my test doesn't do anything yet. And also in the test shows me what tests failed. If I hover over this, I can see covered by one test. If I go into my math and hover over this, it says covered by one test. It says covered by zero tests. If I click on this, it tells me what test and then it shows me that it failed and it shows me the last time and the stack trace. Okay, so now if I change this back to code that will work, then it immediately, well, not immediately, then it relatively quickly in this very simple case turns back to the check mark and shows me that this passes. So this is awesome. Now you might be saying, oh, that's really cool but I could see where that might get in the way. For example, if the test takes a very long time to run or if you're making changes to a method that you know is gonna break the test because you haven't finished the code yet, there's a couple things you can do. You can right click and exclude this particular test from running or you could go to test live unit test and pause or just flat out stop live unit testing. So you can decide when you want it to happen. Do you always want it to be running or do you want to turn it on and off as needed? I suspect if you're starting to write a method or you're making major changes to a method, you're refactoring it, you're totally changing the logic, you don't necessarily want it to constantly be told that you broke the unit test. So that might be a case where you would turn it off and then turn it back on. Okay. So let's see what we're doing on time. That's been a fair amount at this point. So let's, of course I could go on for quite some time, but this is probably a good place to stop. I'll mention a couple things that are cool and that I like. One is we're going to tools extensions and updates and we look online. We can see that if you remember, the very first episode of this show is on the productivity power tools. This is back in the day when I was told to keep episodes 20 minutes or less, which is why I did a part one and a part two. That of course went out the window a long time ago. The productivity power tools 2017 are available, and you're going to have to wait till next week's episode to see those. Justin Clairbrute will be on the show and will show us the productivity power tools. Another one of my favorite features is in the Xamarin realm. If I go to cross-platform and I build a Xamarin application, I now have in the new project dialogue not only the ability to choose what UI technology forms are native, I want to share project or portable class libraries, but there's also now a master detailed template which writes a lot of boilerplate code for us automatically to do master detail. And then I also have the ability to check host in the cloud here and Visual Studio will spin up an Azure app service for me and wire it up to use in my Xamarin application. So that saves quite a bit of learning how to do those things, which I think is pretty cool. And then something you might want to check into, if we go to www.visualstudio.com forward slash VS forward slash preview, we've introduced early access to the Visual Studio preview. So sort of similarly to how you have the Windows Insider program where you can get interim builds of Windows, we're doing something similar with Visual Studio. So you can download the preview versions and be kind of on the preview cycle where you'll get additional updates before they are put into the product for real. Now, our intention here is not to cause lots of instability. I know with the Windows, there are builds like the fast ring where you're on the cutting edge and things probably break. We're not, we're trying not to do that with Visual Studio. So the stuff that makes it into preview is pretty close to being ready. You can kind of consider it RC-type quality. Our intention is not to be giving you stuff that's so early on that it breaks your Visual Studio. But that might be something to play around with if you always want to see the latest and greatest. So I hope you saw a lot of interesting things in Visual Studio. This is kind of a nice tour of some of the things that are in there. I highly recommend you go on channel nine to the Visual Studio 2017 launch event where you can relive the launch, the keynotes, as well as a number of studio sessions and then a large number of videos where we showcase all kinds of features including obviously a lot of the ones that we showed here. So the Visual Studio start page, three new debugging goodies, one of which was click to run. So a couple others. So you'll see where I got some of or a lot of my demos from but then you'll also see a whole bunch of things that I didn't cover here. So Visual Studio 2017 is available. Go ahead and download it whether it's one, two or all three editions play around with it. And we will see you next time on Visual Studio Toolbox as we head into our third, what's the word for a hundred episodes at a time, right? This is episode 200. So our next one's 201. So on we march to 300. Thanks.