Major build speed improvements - Try .NET Core 2.1 Preview 1 today
Head over to the main .NET Core download page and pick up .NET Core 2.1 - Preview 1.
The SDK contains the tools you need to build and run apps with .NET Core and supports Mac, Windows, Ubuntu, Debian, Fedora, CentOS/Oracle, openSUSE, and we even have Docker images for Stretch, Alpine, and more. It's not your grandmother's Microsoft. ;)
Once you've installed it, from a prompt type "dotnet" and note a few new built-in switches:
C:\Users\scott> dotnet Usage: dotnet [options] Usage: dotnet [path-to-application] Options: -h|--help Display help. --version Display the current SDK version. --list-sdks Display the installed SDKs. --list-runtimes Display the installed runtimes. path-to-application: The path to an application .dll file to execute.
I'll run it again twice with --list-sdks and --list-runtimes:
C:\Users\scott> dotnet --list-sdks 2.1.300-preview1-008174 [C:\Program Files\dotnet\sdk] 2.1.4 [C:\Program Files\dotnet\sdk]
C:\Users\scott> dotnet --list-runtimes Microsoft.AspNetCore.All 2.1.0-preview1-final [C:\Program Files\dotnet\shared] Microsoft.AspNetCore.App 2.1.0-preview1-final [C:\Program Files\dotnet\shared] Microsoft.NETCore.App 2.0.5 [C:\Program Files\dotnet\shared] Microsoft.NETCore.App 2.1.0-preview1-26216-03 [C:\Program Files\dotnet\shared]
There's a few interesting things happening here. Youc an see before I had the runtime for .NET Core 2.0.5, and now I also have the 2.1.0 Preview.
It can also be a little confusing that the SDK and Runtime sometimes have different versions, similar to JREs and JDKs. Simply stated - the thing that builds sometimes updates while then thing that runs doesn't. So the .NET Core SDK and compilers might get fixes but the runtime doesn't. I'm told they're going to line things up better. You can read deeply on versioning if you like.
You'll also notice AspNetCore.App, which is a metapackage (package of packages) that's got less than All and helps you make smaller apps.
If you install a beta or preview you might be worried it'll mess stuff up. It won't.
You can type "dotnet new globaljson" and make a file that looks like this! Then "pin" the SDK version you want to use:
{ "sdk": { "version": "2.1.300-preview1-008174" } }
I'll change this to .NET Core's older SDK and try building the .NET Core based Gameboy Emulator in my last post. It's amazing.
Let's see how fast it builds today on .NET 2.0:
C:\github\Retro.Net> Measure-Command { dotnet build } Milliseconds : 586 Ticks : 65864065 TotalSeconds : 6.5864065 TotalMilliseconds : 6586.4065
Ok, about 6.5 seconds on my Surface.
Let's make the SDK version the new .NET Core 2.1 Preview 1 - it has a bunch of build speed improvements.
All I have to do is change the global.json file. Update the sdk version in the global.json and type "dotnet --version" to see that it took.
I can have as many .NET Core SDKs as I like on my machine and I can control what SDK versions are being used on a tree by tree basis. That means you CAN download .NET Core 2.1 and not mess things up if you're paying attention.
C:\github\Retro.Net> Measure-Command { dotnet build } Milliseconds : 727 Ticks : 27270864 TotalSeconds : 2.7270864 TotalMilliseconds : 2727.0864
Hey it's less than 3 seconds. 2.7 in fact! More than twice as fast.
The bigger the app, the faster incremental builds should be. In some cases we will see (by release) 10x improvements.
It's quick to install (and quick to uninstall) and you can control the SDK version (list them with "dotnet --list-sdks") with the global.json.
Please go download the preview and let me know either on Twitter or in the comments what your before and after build times are!
Sponsor: Unleash a faster Python! Supercharge your applications performance on future forward Intel platforms with The Intel Distribution for Python. Available for Windows, Linux, and macOS. Get the IntelĀ® Distribution for Python Now!
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Does the compilation speed increase apply to all sdk based projects or just projects that target .NET Core?
Thanks!
The build time improvement varies based on many factors like solution size, number and type of packages referenced, number of project-to-project references, etc.
It would be great if you could build your solution with both the 2.1.4 and 2.1.300-preview1 SDKs and let us know the results. Or I can run the tests if you can share your solution.
What about a solution mixed with net461 and netstandard projects that use the new .csproj format ? Will it benefit from it ?
Comments are closed.