 Hi, welcome to Visual Studio Toolbox. I'm your host, Robert Green, and joining me today is Justin Clairbert. Hey, Justin, how are you? Very well, thanks. Thanks for having me on. Welcome to the show. Thank you. Good to be here. Justin's a program manager in the extensibility group, and we're going to talk about extensions. And we're going to focus more on the experience for consumers of extensions, not as much on what it's like to create an extension. That's right. Thanks, Robert. There's a lot been going on in the extensibility space, and we've been working with the extension authors to talk to them about the many changes, but I'd like to talk about the experience that users will get with our new Visual Studio 2017 to do with the new installer, the new experience for installing extensions, how we're monitoring performance, some other features in the products that we've taken account. Excellent. Shall I tell you first about the new installation experience? Sure. We're very excited about this. One of the best things about the new Visual Studio 2017 is that... I don't know what was wrong with the old experience where I would go to setup, I'd check everything, and then I could go do something like that. Yeah, that's right, and you could come back tomorrow and hope that it didn't fail. Well, we've improved upon that now, so that now you can install, instead of waiting several hours and installing six or more gigabytes worth of stuff, we've now improved the performance experience of the installer, so you can get an instance of Visual Studio up and running in minutes. And just to demonstrate that, I will bring up an instance right now, and I'll show you. So we have a whole new installation experience. It lets you choose what form or what version of Visual Studio you'd like to install. You can subscribe to many channels so that you can be getting the latest new releases or up-and-coming releases. And you can choose from community, enterprise, and professional, whatever editions you'd like to install. I'm going to demonstrate installing the community edition of 2017 RC. Okay. So this is not on a clean machine. You've already got some other instances. True. To put it into perspective, another one of the new features of the Visual Studio installer is that it allows us to have multiple side-by-side installations. So I can have a copy of Visual Studio 17 as well as a copy of professional, as well as one of the new releases coming out so I can test the new features. That's very cool for people doing content, because if you're writing a course or something, or you're doing something that you want everybody to see, you'd love to be able to do it in community, which gives you, you can make sure that everything you do, everybody has. You're not accidentally showing enterprise features, but at the same time, I use enterprise to develop all day long. Exactly. That's a good point. Yeah. And just to demonstrate, I have instances running here. I've got two instances of enterprise running of two different versions. I also have an instance of Visual Studio 2015 running. But now I will show you how we can install easily a new instance of community. Let's pick the release channel. This instance I'm going to install is going to be version 26124. So by the time this recording comes out, there might be an updated version. But when we hit install, now one of the... So, yeah. This is RC2, because RC3 just got released. Is that about right? This build is very close to the RC3 release that's coming out now. Now, here's what we've done. So instead of the installer bringing down everything you might ever need, and more than you will ever need, we give you the opportunity to bring down just the core editor, just the shell, with things like solution explorer, team explorer, basic text editing functionality, like coloring. But if you want additional components, you can select them. There's a whole raft of additional components that you can choose from, including various .NET frameworks, Azure libraries, all sorts of coding tools, lots of different things, debugging tools. What we've done is we've grouped some of these popular components into what we call workloads. So if you're likely to do some .NET desktop development, we've prepared a workload with full of components that you might be interested in, including the .NET development tools, framework 4.6.1, and some recommendations of other extensions you might want, some that are strongly recommended that we've pre-selected for you and others that you can choose. When I do my development with extension development, I use the extension development workload down the bottom here, which gives me a whole suite of extension development tools, including the Visual Studio SDK. Today, I'm just going to install the core editor to show you how neatly it'll just bring down just a few hundred megabytes. Here, it's got an install size of 733 megabytes. Because I already have an instance running, it wants me to choose a different directory, so I'll put it in community two, and you can give it a bit of a nickname, say demo version. All right, so now, if I can install that. It's asking you to close all instances of 2017.rc. Right, of course, just like any major installer, if you've got the program already running, it's going to want me to shut that down. So, I'll close that down, and hopefully now that goes away. Thank you for that. So now, we can go ahead and install a new version of Visual Studio. 733 megabytes. Yeah, so that's significantly smaller than the 6.2 gig that the last version required you to bring down. So if you're just doing web, you don't want WinForms and WPF. If you're just doing those, you don't necessarily want some of the web stuff. And you can have separate instances for your C-Sharp development. Or C++ development. Python tools require much smaller set. They don't need any of the Roslin components. So I could have an installation that has just the web stuff I do, and a version that just has the desktop stuff, and a version that just has the mobile stuff and bounce back and forth. Yes, and on top of that, you can have extensions installed into each instance that are related to just what you need. And presumably, that doesn't install the product three times. So they're shared installs. Okay, let's talk about that. I'm glad you asked about that. Part of the new setup of Visual Studio is that each instance is its own isolated entity. We are no longer putting entries in the registry. Instead, each isolated entry has its own private registry. So if you should blow away that directory, you also get rid of all the registry entries. So it keeps things a lot cleaner. You don't get stuff hanging over. Also, the other DLLs, assemblies that are required, are not going into the public GAC anymore. They're now also being included in the directories that are part of the instance. So again, when you remove an instance, you remove it cleanly with all the assemblies and you don't need your window system cluttered up with additional assemblies. Got it. Which is nice. There will be, let me think. Is there some shared components? No, there's very little in the way of shared components. Everything's basically been separated into separate instances. So, I believe it's already finished. So that happened a lot faster than we thought. And now we have an instance here. There we are talking to kill time and we don't need to. We can launch this now. So let's launch up the new version of Visual Studio Community 2017 RC, version 15.0, 26114. And here it's starting up. And I get the startup experience where it knows who I am and it can bring down all my settings, my favorite colors, even the roaming extensions. It'll know what extensions I like to use and it can even suggest them to me. And here we are. So we've launched it up. So that's the installation experience. From inside here, I can talk to you about some of the new changes that you'll see inside the tool. Specifically those that relate to extensions. There are so many changes. We're very proud of the features that we brought out. But let's first look at one feature that's very impactful. And that's what we call lightweight solution load or deferred project load. The idea is if I open up a project, which I'll do now, that has dozens of projects. If I open a solution, I mean that has dozens of projects. Even if the projects only take two seconds to load, if I've got 20 projects, that can take 40 seconds to load a solution before I can get in and start working on it. So instead of that, we can... Let's have a look. If I open up my Productivities Tools project. Productivity Power Tools. This is one I was working on last week. Did you know that the first two episodes of this show were on the Productivity Power Tools? I had no idea. No, this is a no. Back in the day when, you know, the idea was to limit the show to no more than 20 minutes long. Oh, yeah? And so I did part one and part two. Those are the first two episodes of the show on the Productivity Power Tools. Well, there you go. Well, maybe we can come back some time and do another one since we've just released these tools for 2017. You're going to. You're going to be back here in about a month and we're going to do an entire episode on Productivity Power Tools. Oh, that is good. Look for that in probably late February, early March-ish timeframe. Good. I'll look forward to coming and showing you about that. Good, because you're on my calendar doing it. Now, what's happened is the Productivity Power Tools that I was loading up in that other instance, that was a very clean instance. It didn't have the tools for C-Sharp development. So I'm going to open up in another instance that I've got running. I'd like to draw your attention to what we see at the moment. What's going on here? Looks like there's a big yellow warning bar. It's telling me we've noticed that this extension, Solution Error Visualizer, is slowing down Visual Studio. Well, that's not very good, is it? But at least now we can manage it. This is one of the complaints we get a lot, is that people are reporting that Visual Studio appears slow. And it's not always the product itself. Because we have such a vast ecosystem and we allow extension developers to develop all sorts of extensions, which our users love, often there are extensions running on Visual Studio that are slowing the product down at startup, solution load during typing, tool window performance. So one of the great new features that we've got in extensibility is that we're now alerting users with a big yellow bar that will say, this extension is slowing you down. So if I want to, I can go and look further into that and manage Visual Studio performance. When I click on this, it launches a new window that we also have accessible here under the help menu called Visual Studio Performance. Let's have a look at that. So here, it's shown me that there's extension. Seven seconds on startup. That's adding seven seconds. Who wrote that thing? Well, that's a community project that we're all working on. So this lets me know as an extension author, because I am responsible for this product, that I can go and work on the performance of that at startup and then I won't annoy the user. If I don't do that, I might hear from the user who might help me get away. So this could very well be an extension that you want. Like Outlook will do this from time to time. Well, tell me that an add-in, it was disabled because it's slow. When I look at the add-in and it's something that I rely on. So I turn it back on, but it's nice to be told that it is that particular add-on. So in this case, you could report this, talk to the author and alert them. But many times you might know that you have an extension, you expect it to take long because you know it's doing some processing, in which case you'll be alerted three times about each extension. If you continue to ignore those warnings, you won't be alerted anymore. So that's how you can manage that. So if you want the extension to keep running, you'll see it, you'll know about it. Three times later, it will stop telling you about it. It will stop telling you, it won't automatically disable it. That's right, but you will always be able to then go into the performance manager via the help and have a look at what extensions. I'll draw your attention to what it's looking at. Extensions on startup, solution load, and typing. So those are the three things that are most important at the moment. And specifically, we're measuring the utilization of the main thread. So if your extension is running on a background thread, it won't show up here because it's letting the program run along. So anything that's hogging the main thread on the program, and we're reporting in three categories. There's startup. So this, before you've loaded any solution, just opening the product can sometimes load extensions, like in my case, the solution error visualizer, that are affecting performance of startup. So they'll be reported there. Solution load is once you actually start loading a solution, then many other extensions kick in. So we'll alert you about those. And then finally, typing. Some other extensions fire off on almost every keystroke, and that can affect typing performance. So each of these are controlled by a threshold that you can set. And by default, they come out to about five seconds for an alert and 15 or 20 seconds for it to show up in here. Is that configurable? It is configurable in the private registry that comes as part of it. Okay, so I could decide what my threshold is. You can, that's right. But the typing threshold, obviously, is much higher. It's down to milliseconds. If it takes more than a couple of hundred milliseconds, you'll know about it. Finally, there's tool windows. And there's extensions and also in-product tool windows. You might have an in-product tool window like the error window or even a build window. If they're turned on by default, they will run at startup. So if they're being slow, here it looks like Team Explorer takes three seconds. Now, I like Team Explorer. I'm probably happy for it to continue to take three seconds. But maybe I don't need it to happen on startup every single time. So if I minimize or auto-hide it at startup, that'll save me three seconds every startup. So this is what our performance monitor brings in. Cool. So is that three seconds on top of the seven seconds? Or so is that a total of 10 seconds? Or are they happening at the same time? Yes, that's right, that's each. So one of them is contributing three seconds. The other is contributing seven seconds. And all of this adds up. So now you can disable those extensions. Oh, which I can show you, and I know I ought to. I'll disable the slow extension here. And now it says I need to restart for changes to take effect. But I'll do that later. Okay. So in the meantime, let's load up a solution. This is the Productivity Power Tools that we spoke about earlier. This has 22 projects in it at the moment. And let's watch as it loads these projects here. It's loading them in the background. They're loading quite quickly. I think we've improved performance of loading. But there's so many projects. It still took a few seconds. Yeah. What we can do now is with this new tool called Lightweight Solution Load, we can have it not load any projects. So under tools options here, there's a new setting under the projects and settings, the projects and solutions. This one at the bottom, it says Lightweight Solution Load for all solutions. If we enable that. And it can be overridden for individual solutions. Well, specifically, I can talk to you about the way that works. Okay. So you're kind of thinking of like the Xamarin Forms project. Has the, typically the shared code, the iOS, the Android, the UWP, the Win8 and the Winphone8 projects. Right. And I don't necessarily want to wait for them all to load. I might spend a week working on the iOS project and I might not ever want the other ones to load, right? So I could configure that. Sort of. Sort of, okay. At the moment, the way it works is that whichever projects you had open when you close the solution, we'll reopen and we'll reload. Okay. So that's the best way to manage it. Most fair enough. Leave it open and leave it open. Okay. I'll open it. All right. I'll demonstrate that now. That's cool. When I launch Productivity Power Tools, it now says Lightweight Solution Load. Straightaway, I've got access. I'm not waiting any. There wasn't even one second of delay. I'm into my tool and I can immediately start searching for files. We have a new go-to facility. Now, if you build the solution, then you'd have to wait for them all to load, presumably? No. No. Good question. Building runs in the background. You don't need the solutions and the projects to load in the tool in order for the MS-Build to build your product. So you can build without having to load all the projects. You can also do basic refactoring. Behind the scenes, well, in a practical sense, you never had that capability in 2015 because you had to wait for everything to load, right? True. We never had this. But behind the scenes, was that always the case or is that new plumbing? Basically, you could always launch out to a command window and run MS-Build. The tool would help you construct that. Right. So you could just run it, but you could always from the command line run and build without Visual Studio. That is very cool. But let's see, we've got a new feature that will allow you to find projects. But let's have a look. As soon as I open a project, did you see that quick delay? It said I'm loading the project. I'll demonstrate on another one. As I expand a project, this is when they get loaded. So now it says the project is loading and it's loaded. So it delays the project load until you need it. And then if I open up a file, I'm just opening up now, then I've got two projects open. If I now close this solution, then the next time I open it, those two projects that I opened will load. One, two. Load it straight away. And the rest will stay unloaded until I need them. So that's lightweight solution load. It's a pretty neat feature, especially for people who are working on large solutions. Oh, absolutely, yep. Now, what brings us onto that? We're talking about some of the new features of Visual Studio 2017 that affect extension developers. And we've just seen two of them that affect extensions. The performance monitor. So from now on, if you write an extension and it's badly performing, you know that your users will know about it and they might report it to you. So that is- Do you find, does the product report it to you? So the product will send out some reports and extension authors can subscribe to listen in and be notified so that they don't have to wait for users to email them and say, hey, your product's bringing a big yellow bar. Ideally, you'd know ahead of time and try to do something about it before your users start complaining. And we hope that the extension authors will use their own product and their own tool and see these errors before they put them out. So that's great. The second thing that affects extensions is lightweight solution load because we can't rely on the projects being loaded. Any extension that needs project information, like if you're going to be looking at all the files in the project, if you want to provide a tool that allows you to enumerate the methods in a file, that information won't necessarily be available. So now there's new APIs you can call to say, is the solution fully loaded? Is this project loaded? And if not, please load the project or ensure the project is loaded, then you can get what you need. You can also account for it. You can offer partial work and say, okay, here's some files that we know about and then offer a UI to allow the users to drill down for more, in which case then your function can expand the rest. So things extension authors can do to work out. Is something like replace in the entire solution require the projects to be loaded? Is it smart enough to go? There's a few things that will work nicely without loading the projects. Finding files works, building works, and basic refactoring works as well. And that's one of the main reasons why people load 50 projects is if they rename a method or a variable, they need it to be reflected in every class that uses it. So this is one of the beauties. In the background, lightweight solution load, we'll do a small lightweight pass of the information. So you will get refactoring, find files, and building. So that's pretty good, huh? Yeah, that is awesome. So the other thing that affects extension authors is the fact that we don't have the components necessary. You can't rely on all the components being there. So I'm gonna talk about that a bit more detail now. One of the changes to extensions is that we have a new extension model. It's a V6, V3. And as part of that, we've introduced a new section to the extension manifest. It's this thing called prerequisites. The idea of a prerequisite is that we will tell the tool what components we need. For instance, if this extension that I'm running, a line assignments needs Roslin components, we can say, well, we can use this UI and say, okay, I'm gonna need some sort of C-sharp and visual basic language. Or I might even be able to get more specific and drill down and oops, and say, let's see, what have we got? We got any Roslin stuff here? Well, let's just say we need the C-sharp and visual basic Roslin compilers, there we go. By default, it's populated the versions that I have on my machine. And so that anything I'm testing with the users will have, and we can change these versions here and say, well, any version of version 15 and above, I'll be happy with the users to have, we put that in. So now we've added an additional prerequisite. What that means is that when we build this extension, when someone goes to run it, the installer will detect whether this component is on the system, and if it's not, it will prompt the user and say, you're missing this, would you like to get it? And if they say, okay, it'll pull down the component, install it into the system, and it'll be up and running. So that's one of the new things that extension authors need to do, to allow for the fact that we now have such a very small installation of Visual Studio. And that's one of the big changes that we've been promoting. So if you're an extension author out there and you need to upgrade your extensions, that's one of the main things you need to do, as well as changing the installation target to be hitting 15.0, which is our new version. So what we could do, if you'd like, is we could demonstrate how to build an extension here. Sure, yeah, let's see that quick. All right, let's talk briefly about extensions. Extensions are available for Visual Studio, and for those who didn't already know, you can do all sorts of incredible things with the product by bringing in extensions. Under the tools menu, we have extensions and updates, and that allows you to browse the marketplace. There's about 7,000 extensions available today. And you can look online, and here we'll just bring it up, and there's dozens of extensions that people have written that do all sorts of things. Browsers sync, add new file. Our Telerik guys have been writing great extensions for WinForms. If you're interested in productivity, there's extensions like hot commands that I wrote earlier this year that will give you all sorts of new features like toggle comment and duplicate code. So you can fetch these tools right here from inside installation, the extensions and updates dialog. Alternatively, you can go to the marketplace. Oops, we don't want to use Chrome. Let's use Edge, and we'll bring up marketplace.visualstudio.com. Normally known as the Visual Studio Gallery. That's right, we recently migrated from the Visual Studio Gallery over to marketplace. So now, I'll just bring this up. And so you can browse the marketplace. We're featuring a bunch of extensions at the moment like Resharper, which is a very powerful extension that gives all sorts of functionality into your product. And you can browse for whatever you like, including most recently, the PPT, which have been launched for 2017, and we'll come back and talk more about that in the next release, but there's now over 15 extensions that can help improve your productivity. So you can download those extensions and install them, and I'd like to show you the installation experience. But why don't we do that with an extension that we developed right here on the show? So how about we have, I won't save any of those changes, but how about we start a new project and we'll develop an extension that pops up a dialog box that says hello, Robert. How about that? You've probably seen that one before. Everyone should have that. Yes, of course. So here we go. Here's how you develop an extension. If you've got the workload, which is the extensibility workload, then when you go File New Project, then, let me use the keyboard because keyboard is much faster. File New Project. So that actually, so if you don't, this is a good question. Since you don't have, oh wait. In this instance, I've got a visual studio extensibility. So you do have extensibility. All right, so if you didn't, you wouldn't have that node at all, right? Well, let's have a look at the experience. If I didn't have that, here's the other, the clean install that I put together earlier, and it doesn't have the extensibility workload. So if I attempt to do it, create a visual studio extension, let's see what happens. So under install templates, all we have is blank solution. But we've got this link that says if this is not what you're looking for and you want more things, let's find out. So you can click here and it will launch the visual studio installer and then you can go down and get more components. Separately, if you happen to open a project that's an extension project, it will detect that it's an extension project and offer for you to download the extensibility tools. Because what we do occasionally in 2015 is show you, is have a template for installing things, like the tools for gaming, Unity, et cetera. There's actually a project template for how you can install the Unity tools. True, true, true. Now we... Kind of confusing potentially. I know what you're talking about. We haven't cluttered the base installation with all of that in this version. So you kind of need to know what you're looking for. But meanwhile, I'll take you back to writing extensions. So it launched the installer for me, which I won't be using at the moment. But here we go. If you do have the extensibility workload, then under C-Sharp or Visual Basic, you'll see extensibility nodes. And I'll choose to create a V6 project. And we'll call it Tech Demo. And create that project now. So this is... What's it doing? Where does it wants to put it? That's fine. Select folder... I must hit the wrong button. Tech Demo, solution name is Tech Demo, put it in projects, and I'll put it in C projects. Okay, let's see how we go. So it's going to create a blank solution. Here's a bit of a help page that can show you, give you some information and link you to some docs and the extensibility samples that you can follow. But otherwise, now what we'll do is we'll right click and we'll add an item to this project. That'll be a custom command. So again, that's in our extensibility list here. Custom command and we'll say, and this will be the Hello, Robert command. And put this in here. It's loading up. And now what it's going to do is it's going to make some changes to my project. So I'll get a VST file, and it'll generate a bunch of things for me. Straight out of the box, this product should run. So why don't we give it a go? Live demo, let's see if this works. But before we do, let's make sure it actually says Hello, Robert. So it was quickly go down to the talky box and we'll put in the title is Hello, Robert. We're happy with that. And the message, let's say, here we go, we'd change this text and the message will say Hi, Robert. All right, now let's see if that builds, build solution. Cross your fingers here. Now, as part of the new Visual Studio 2017 extensions, we're going to need to do some minimum things on this before this will run. For instance, we spoke about the prerequisites earlier, so let's go and make sure that we have the prerequisites that we need. In our prerequisites, we've got our core editor, which is great. So that's the bare minimum that we need. Our install target is pointing to version 15, so that's excellent. So this is built. We can now, we'll see if we can install this extension. But for fun, should we add in a workload that it needs to download? Sure. Okay, let's force it to have to pull down something that my other installation won't have. So prerequisites, I'm going to put in a new prerequisite. Let's see, maybe something nice and light and small. How about IntelliTrace? Everybody loves IntelliTrace. So that's now our prerequisite. We're going to say, if you're going to run this tool, you have to have IntelliTrace. Is that an enterprise feature? Is it? Yeah, you might be right. Let's make sure that we want this to be available for community. So we'll bring in a community feature. Let's pick something else here that we know. Or do you have desktop? Well, what about code map? Is that not an enterprise feature, is it? I'm not sure. Okay. Well, profiling tools are good. MS build, everyone should have MS build. Let's put that in. Okay, so this requires MS build. We'll now build this tool and we'll have a look at the output build. I will show you the output, just so that anyone who's interested in knowing what an extension looks like. If we open this in the bin folder, what you will have is a V6. That's an extension that ends in .vsix. Down here, it's called tech demo. It's a single V6. And what it is is just a zip file. And if we open that file, you'll see it contains all the DLLs we need, the tech demo DLL, as well as a package def, but also two important files that are new in Visual Studio 2017. This is the manifest.json and the catalog.json. And with those files, it becomes a Visual Studio 2017 in extension. So let's see what happens if we run this, shall we? Here it goes. We're gonna run this extension. It's launching the Visual Studio installer, the V6 installer, that's Visual Studio extension installer. And it's just looking on my system to see how many instances I've got, which ones this one's installed on. And it'll prompt me to choose which instance I want to install. So because I have so many instances, now this is really interesting. You could decide not to put it in certain instances. Exactly, let's take a good look at this. It's saying it's detected that there are three instances I can install it on. If I want to install it on this first instance, I'm gonna need to bring in MSBuild. And it's identified that these two versions already have MSBuild, so it will install with those without any prerequisites. I don't need it installed in the other versions, but I would like it installed in my community. So therefore I will accept that it will download and install MSBuild for me. Now here's what's gonna happen. Just like any other installer, because I have the product running already, it's asking me to please shut it down before we can go any further. So we need to shut down all our instances of Visual Studio because we're about to make a big change in install MSBuild. So I'll close this instance down. Our installer's keeping a track on the running processes and it's checking when they're all shut down. We've got another instance running over here, so I'll shut that down. So all not just the ones you're installing into. Now there's only one process, that's right. It needs to shut down every instance. Because there are some shared components, especially if we're gonna be bringing in prerequisites and we don't know where we're gonna need them. There's only one thing left. We've got a little end task button to speed things up. You can just, oh, but there we go, it's already ended. So now all those components are shut down. It's installing and it's gonna bring in my extension. It's already finished. And we'll have a quick look at the install log. And we might see that it's brought down that one prerequisite. The install log's quite beefy, but it's brought everything down and it looks like it's successfully installed that. So that means now, if we attempt to launch that Visual Studio, which instance have it got? I've got so many instances now. It was called demo or something. Yeah, well, I could find it from the installer here. And then hopefully we'll see that our extension. Well, that's a neat little trick that if you have multiple instances and you didn't necessarily put task bar, you didn't necessarily pin in the task bar, you can go into the installer and find the ones you installed. Exactly, and then I can launch that version from there. And it says installed. Oh, that's cool. Yes, right. So I'll launch this up now and this time I'll pin it so that I don't lose it for later. So I'm gonna pin this tab. Okay, pin to task bar and I'll slide it down next to all my other instances. Okay, now let's have a look. Under our tools, extensions and updates, we might have a new extension here. What's installed? Tech demo, there it is. It's an empty V6 project. It's created by Justin Cleaver on 26th of January. Now, let's see if it works. If I go tools, invoke, hello, Robert. Hello, Robert, there's our extension. So there, we've just created an extension for 2017 and installed it and demonstrated the prerequisites and the installation. So I suppose that's all we need to talk about today. Thank you, well, I suppose that's all we really need to talk about today. Yeah, that's awesome. Cool, so you're gonna be back in about a month and do the productivity power tools. That'll be great, lots of extensions. I'm so excited about it, I may see if we move it up a little bit. That'll be good. It'll be in the very near future. Thanks a lot for coming on the show and showing us this stuff. Pleasure, thank you for having me on. All right, hope you enjoyed that and we will see you next time on Visual Studio Toolbox.