.NET Core 1.1 release – What Is It?

Earlier this week Microsoft announced that they had released the first minor update to .NET Core, taking us from version 1.0 to 1.1.
You can read about the release here, but this post is a summary of the things that have changed and things to look out for.
Before I go into what has changed, two quick notes:
- .NET Core 1.1 is NOT READY FOR PRODUCTION as it is technically a preview (skip to “Installing and Running” for more information on this)
- I have not had a chance to build anything with .NET Core 1.1, but I’ll be remedying this tonight
What’s New?
A whole bunch of stuff is new or has been updated.
Supported Operating Systems
Firstly, .NET Core 1.1 now supports more Operating Systems and Linux Distributions. Along side all of the OS’s that version 1.0 supported, .NET Core 1.1 now supports:
- Linux Mint 18
- OpenSUSE 42.1
- macOS 10.12
- Windows Server 2016
This brings the total supported OSs to:
- Red Hat Enterprise Linux 7.2
- CentOS 7.1+
- Debian 8.2+
- Fedora 23, (Support for Fedora 24 coming in the final release)
- Linux Mint 17.1+
- OpenSUSE 13.2 & 42.1
- Oracle Linux 7.1
- Ubuntu 14.04 & 16.04
- Mac OS X 10.11 & 10.12
- Windows 7+ / Server 2012 R2+
- Windows Nano Server TP5
- Windows Server 2016
That’s mightily impressive for a company that used to think that Linux was a cancer and needed to be wiped from the Operating Systems map. Especially when you think that only two of those OSs are Microsoft ones and that one of the others is macOS, which means that two thirds of that list is comprised of open source OSs.
All down to current CEO Satya Nadella
Fixes and Improvements
According to the announcement, Microsoft have added 1380 new APIs to .NET Core 1.1. That’s a hefty number of new APIs.
Going through all of the changes would be out of scope for this blog post (as it was for the original announcement). However, Microsoft have put together a handy list of all the changes (with the power of git) and you can see them all here
Note: the API additions are presented as a git diff, so they are not documented in anyway
A lot of fixes and improvements were made to .NET Core 1.1, too. Again, parsing this list would be out of scope for this blog post but you can read about them all here. The changes are presented as a list of commits, each one with a commit message and a link to the actual change in the code base.
Caveats
The first thing to note about .NET Core 1.1 is that it does not contain the CSProj and MSBuild changes promised in the announcement for the new Visual Studio 15 Tooling (which you can read about here). Here is a description of the CSProj changes that are still incoming (taken from the Visual Studio 15 Tooling announcement):
Simplified csproj format: The csproj format has been made as minimal as possible to make it easier to edit by hand. Hand-editing is optional, common gestures in Visual Studio will take care of updating the file and we will also provide command line options in the CLI for the most common actions.
There is still no date on this, other than a cryptic “The previously announced MSBuild and CSProj changes are not part of this release, but are still coming”. My guess is that it will ship as part of a .NET Core update along with the Visual Studio 15 Tooling.
The CSProj format will be familiar to anyone who has worked with .NET on Windows with Visual Studio in the past (but just different enough to keep things fresh):
<Project> | |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" /> | |
<PropertyGroup> | |
<OutputType>Exe</OutputType> | |
<TargetFramework>netcoreapp1.0</TargetFramework> | |
</PropertyGroup> | |
<ItemGroup> | |
<Compile Include="**\*.cs" /> | |
</ItemGroup> | |
<ItemGroup> | |
<PackageReference Include="Microsoft.NETCore.App" Version="1.0.0" /> | |
<PackageReference Include="Microsoft.NET.SDK" Version="1.0.0" /> | |
</ItemGroup> | |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |
</Project> |
<Project> | |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" /> | |
<PropertyGroup> | |
<OutputType>Exe</OutputType> | |
<TargetFramework>netcoreapp1.0</TargetFramework> | |
</PropertyGroup> | |
<ItemGroup> | |
<Compile Include="**\*.cs" /> | |
</ItemGroup> | |
<ItemGroup> | |
<PackageReference Include="Microsoft.NETCore.App" Version="1.0.0" /> | |
<PackageReference Include="Microsoft.NET.SDK" Version="1.0.0" /> | |
</ItemGroup> | |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |
</Project> |
.NET Standard
.NET Core 1.1 adheres to version 1.6.1 of the .NET Standard (which can be added in to your projects via a NuGet package), not version 2.0. You can read about the .NET Standard here (I’m planning a post about it and what it is, for the near future).
When pressed for further confirmation on the .NET Standard 2.0, Rich Lander (author of the announcement) had this to say (taken from the comments of the announcement):
I can see how my wording was confusing. .NET Standard 2.0 support will come in a later .NET Core release, after .NET Core 1.1. .NET Core 1.1 has support for .NET Standard 1.6.1. There is a whole section of the team that is working on .NET Standard 2.0, exclusively. It’s a very important deliverable for the team.
Installing and Running
.NET Core 1.1 Preview 1 installs side-by-side with .NET Core 1.0. .NET Core 1.0 applications will continue to use the .NET Core 1.0 runtime. The .NET Core 1.0 environment is designed to be almost completely unaware that a later minor or major release is also installed.
This is great news
And exactly how the .NET framework works on Windows – you can have as many different versions of the .NET framework installed on a single machine as you like. Compiled .NET code will ask for specific versions of the .NET framework at runtime and they will be provided (or a higher version, if present) by the GAC
However if .NET Core 1.1 is installed alongside 1.0, then running
dotnet new
will create a new .NET Core project which targets version 1.1. This could be a problem if those new projects are released as Microsoft have this to say about .NET Core version 1.1:
It is not “Go Live” and is not yet recommended for production workloads.
Microsoft have asked developers to provide feedback on whether dotnet new should provide the highest version by default or not, and have said that they will act on it accordingly.
Related Releases
Along with the release of .NET Core 1.1, Microsoft have announced the release of ASP.NET Core 1.1 and Entity Framework Core 1.1. I have blog posts for these new changes in the pipeline, too.
I’ll need to cover what ASP.NET Core and Entity Framework Core are first, though. So sit tight.
Downloading .NET Core 1.1
All that’s left to do it link to the download page.
It’s important to read through the details on the page (if you’re running one of the supported Ubuntu/Linux Mint distributions) as there are specific instructions for installing version 1.1 from apt-get.