Changes in v3.7

*****
This version of NCrunch introduces changes to the grid protocol. This means that grid node servers
must be updated before they can be used with the new version.
*****


Added support for .NET 4.7.

Reverted a change to the .NET 4.6.2 detection that was introduced in v3.6. It seems that this change was made
based on misleading information and it has been causing NCrunch to think that .NET 4.6.2 is installed on system
where it actually isn't.

Fixed SEH exceptions being thrown in the test environment.

Implemented a time-sliding synchronisation buffer intended to clean up NCrunch's handling of multiple changes being
made to the solution simultaneously. Events occurring from changes made to the file system and projects held in
IDE memory will now be held in this buffer and batched together, then de-duplicated and released into the engine
at the same time. This should have the following affects:
- When changes are made to CPS/.NETCore projects in the IDE, NCrunch should only reload the project once, instead
of many times
- NCrunch should be able to better handle source control actions by aligning with changes made to the file system
in one step, rather than trying to synchronise every individual file change when it happens
- There should be a much lower chance of NCrunch finding its way into a broken state as a result of large-scale
refactoring or Nuget package updates
- Overall performance should be improved

Redesigned NCrunch's project synchronisation system to allow it to respond to in-memory changes made to shared
projects.

Adjusted the NCrunch configuration system so that multi-targeted projects now have separate configuration files
for each target. This should make it possible for NCrunch to be configured to ignore specific target frameworks
that may not be supported by the engine.

Fixed an issue that could cause IL-comparison hash inconsistencies between clients and grid nodes.

Fixed an issue that was causing impact detection inconsistencies when referencing
Microsoft.VisualStudio.QualityTools.UnitTestFramework from the GAC and using distributed processing.

Redesigned NCrunch's handling of impact detection around compiler generated code. The new approach should give
much greater reliability and should resolve many problems, especially around inline lambdas and async code blocks.

Fixed an impact detection hole related to constructor and static constructor coverage not being properly tracked
if inline lambdas were initialised early in the class structure.

Fixed an impact detection hole inside compiler generated code (async/await).

Fixed an impact detection issue where async/await blocks could cause NCrunch to think tests were impacted when
they actually weren't.

Fixed an issue where NCrunch was interfering with some debugger stepping actions around async blocks.

Fixed an issue where specifically queuing large groups of tests for high priority execution was causing the engine
to recycle the task runner over and over, reducing the efficiency of the test run.

The NCrunch console tool will now explode with an error and self-terminate if instructed to use an engine mode
that does not exist in the configuration set.

Messages passed to NUnit3's Assert.Inconclusive method will now be written to the trace output by NCrunch.

Added several biztalk msbuild item types to NCrunch's auto dependency resolution system.

Fixed several type conversion issues when dealing with MSTest DataRow tests.

Added handling for the DisplayName property in MSTest DataRow tests.

Fixed an issue where NCrunch was not correctly synchronising with on-disk changes made to unloaded projects.

Fixed an issue where adding a new .NET Core project to the solution would cause the project to be stuck in a broken
state, because of the late creation of the project.assets.json file by VS.

Adjusted NCrunch's file system integration so that changes made to build import files on disk will cause NCrunch
to automatically reload affected projects.

Adjusted MSTest integration so that when confronted with multiple versions of MSTest used simultaneously, NCrunch
will always use the latest referenced version.

Added a documentation link to NCrunch's error when it encounters .NET Standard test projects, as the error message
has been confusing people.

nCrunch.TestRuntime.DotNetCore is now a signed assembly.

Fixed an issue where NCrunch could throw an exception downstream from attempting to load .NET Core projects that
couldn't be loaded. This would cause the engine to seize up and not report earlier more relevant problems.

Adjusted NCrunch's creation of its VS output window so that this will only happen if the "Log to output window"
setting is enabled. This is because the act of adding an output window to VS can take considerable time/CPU
and to do this every time can increase IDE startup times.

Fixed an issue where NCrunch's Gallio cache was not being correctly cleaned up on grid nodes. This could cause
a build-up of small cache xml files over time.

Adjusted the cleanup of NCrunch's Gallio cache so that this is performed on engine initialisation rather than
IDE startup, in case this action increases IDE startup times.

Resequenced some initialisation tasks to be performed on-demand rather than during IDE startup, to avoid
increasing IDE startup times.

Fixed an issue where custom attribute data for interface implementation instances was being stripped out by
NCrunch instrumentation. This could then result in compile time issues for referencing projects.

Adjusted the NCrunch console tool so that this will now attempt to execute "msbuild /t:Restore" on projects
when running on a machine with VS2017 installed.

Introduced a speculative workaround to try and resolve a problem where the NCrunch console tool sometimes explodes
with a 'The parameter is incorrect' exception during its initialisation.

Fixed an issue where recursive method calls inside compiler generated methods could cause NCrunch's IL change
detection system to explode with stack overflows.

Fixed files stored under the VS2017 install path being included in NCrunch workspaces when they shouldn't be.

Fixed content files under the user's nuget packages directory being included in NCrunch workspaces when they
shouldn't be.

Introduced a speculative fix to resolve problems with CustomAfterMicrosoftCommonTargets resolution issues at
build time.

Fixed an issue where CPS-based .NET classic projects could encounter runtime assembly load issues with Nuget
assembly references.

Fixed an issue where the NCrunchCacheStoragePath setting was failing to load where an environment variable was
used for the entirety of this setting's value.