Fixing error MSB4036: The “GetReferenceNearestTargetFrameworkTask” task was not found

When you build a project with MSBUILD Tools 2017 and getting that error, you probably need to update your MSBUILD Tools components.

Download the latest version of MSBUILD tools from https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017, run it, choose Modify and then select “Web development build tools” and “.NET Core build tools”.

If you are getting error CS8107: Feature ‘default literal’ is not available in C# 7.0. Please use language version 7.1 or greater.

or

error CS8107: Feature ‘leading digit separator’ is not available in C# 7.0. Please use language version 7.2 or greater.

You probably need to add <LangVersion>7.2</LangVersion> to your project file(s). Make sure to add it to both debug and release configuration. It’s likely that you will run your server builds on release, so that’s needed.

Fixing Visual Studio 2015 after update 3

In case you did not notice, Microsoft released Visual Studio 2015 Update 3 a couple of days ago. I immediately jumped in because I have high hope for better stability – VS2015 update 2 has been crashing more open than I would like.

When I updated my VS on my work computer, all went well and it worked right after that without any problem. However when I finally updated my VS on my home computer, problem appears. Everytime I try to open a solution, it crashes! Rendering my VS2015 totally useless. It’s not a problem I can ignore, and I would avoid reinstall it, unless it’s the last resort.

Digging in the event viewers shed a light on what is wrong:

So System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ was missing.

But why? and missing from where? A quick search shows that it was used for Roslyn, and dnx uses version 1.1. Visual Studio 2015 also crashes if I try to open Tools => Text Editor => C# => Advanced, where the Roslyn options are. So the problem was Roslyn unable to load an assembly it needs, then the entire VS crashes. Lame!

It seems unable to just reinstall Roslyn alone, so my best bet is to put the correct System.Reflection.Metadata version … somewhere. It’s not clear that where should it be – so I should put it in the most common place – the GAC – Global Assemblies Cache.

This is an attempt to fix:

First, I need to have the assembly. This will require nuget 3.x to run, so you can download the latest version (3.4.4 at this time of writing) from here.

And then open your Developer command prompt for VS2015, and cd to the lib folder of downloaded package, for me it’s D:\Downloads\System.Reflection.Metadata.1.2.0\lib\netstandard1.1, and run the famous gacutil to install the assembly to GAC:

Open my solution again and it works! It might be not the best solution, but it works and I don’t have to reinstall VS2015, so I won’t complain.