 Hi again Red Hat Developers. This is Jason with the Red Hat Developers program here at day two of Summit 2017. We're in the dev zone with Omer Majid and he's going to talk to us about .NET Core, its versions and its components. Omer, I'm here to talk about .NET Core, versions and components. You might think, what? Versions? Who needs to know? This is so basic. I was really motivated by this little tweet. Really, what version are you installing? If it says 103, 101, 101, 104 and 111. Really, what is it? I thought to myself, it really can't be that difficult. Let's just run dash dash version. So I did. I got .NET Core 103. I ran dash dash version and it says 100 preview too. Let's Google a bit. So obviously you'll find a GitHub issue that says, what should version display? I mean really, the cool thing is there are 53 comments on this. None of them image memes or macros. So there are 53 discussions about what should it display. It's a really complicated thing. Funny thing is, if you go to Microsoft's website to download .NET Core, you're going to see two variants, SDK and Runtime. It doesn't justify 53 comments, you might think. And that's true. So let's go on. You might think, okay, maybe there's more to the versions. Maybe I look at the GitHub repos and there's .NET, CoreFX, CoreCLR, CoreSetApp, CLI, Core and SDK. When you see SDK, you might think, okay, this is the SDK download. No it isn't. Actually, let me break it down for you. This is how .NET Core is split. There's three components. The Runtime, the host and the CLI. The Runtime is what your application runs against. So your VM, your libraries, the framework you're targeting. The CLI is what you build against. So it includes all your build tools, your .NET command line, your SDK, MS build, Project JSON, what have you. And the host is a really thin component that's basically just a single binary. And you use that for starting up .NET. So those are the three components. How are they versioned again? Oh, sorry, let me back up. So when you do an install, you either download the Runtime environment or the SDK. If you get the Runtime, you get the top two components. If you do the SDK, you get all three with possibly multiple versions of the Runtime. And how do you find out the version of each of these? Well, this is where it gets really, really fun. Okay, for CLI, you actually do .NET-Version. And it tells you the version of the CLI. Not the host, not the Runtime. Host is next. It's actually pretty easy. You just run .NET by itself. It's really tricky, but it literally says .NET Core shared framework host. And it gives you the version of the host. In this case, for a 103 download, your host might be 101. There's no command to display the version of the Runtime literally. So you're stuck for now. I use this technique of LS. So if you look inside the shared directory of your .NET image, you'll find a directory for Microsoft .NET Core .app. And if it says 103, that's the version of your Runtime. So hopefully this has been really educational. And now you can make a little bit more sense about versions. Going back to the original tweet, the SDK version is 101. That's the version of the CLI. When it says 104.NET Core, that's a version of the Runtime. And when it says .NET Core 111, that's again version of the Runtime. So in this case, when you download this particular binary, you're going to get a CLI of version 101 and two Runtime versions, 104 and 111. Hopefully versioning makes a little more sense now. Thank you for attending.