The main issue here actually comes from a little known redirection system that Microsoft introduced in a minor update to VS2017 around the middle of last year.
System.ValueTuple is one of a number of assemblies that can be redirected internally inside the MSBuild system to a different location. MS did this to try and retroactively introduce support for .NET Standard in older versions of .NET Framework, and it really made a terrible mess of the build system because suddenly the version of an assembly being used at build/run time is not always the same as the one being referenced on disk.
Because the redirection is internal to MSBuild and we found no way to integrate with it, we instead try to organise the dependencies around it. Assemblies that can be redirected by the system we avoid tampering with and moving into _ncrunchreferences because by doing this we risk breaking the build system in any number of unpredictable ways.
System.ValueTuple is one of these assemblies. In most scenarios (actually, all known ones except yours), this works fine, because people reference this assembly using a Nuget package or from an established framework location. By copying this assembly into your solution directory and referencing it using a <Reference>, you've managed to expose a hole in the system that we can't plug without breaking something else.
So to solve this, you'll need to either use the 'Additional Files To Include' setting to ensure the referenced file exists in the workspace (without _ncrunchreferences sandboxing), or you'll need to reference the file from its Nuget package. Sorry, but this isn't something we can fix in the product. The design of the platform has really tied our hands here.