Changes in v3.12

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 an optional 'Process Id' column to the Processing Queue Window, showing the win32 process ID of the process responsible
for the processing. This also works for tasks being remotely executed on grid nodes.

Adjusted the NCrunch console tool so that this can now override project-level settings using the command line.

Added the ability to inject configuration settings into the NCrunch grid node via the command line of
NCrunch.GridNode.Console.exe, for example: NCrunch.GridNode.Console.exe -LogVerbosity Detailed -MaxNumberOfProcessingThreads 5


Restructured NCrunch's NUnit3 test discovery system to improve performance. This has had a very significant effect on test discovery
times, improving discovery performance under NUnit3 by over 1000%.

Fixed a performance issue in which NCrunch was allocating unnecessary objects during execution runs. When working on test projects
with many tests and many methods, this had the potential to overload the test process and even run out of memory. This fix should
result in a noticeable reduction to test execution times and memory consumption when working on large solutions with many tests.

Fixed a performance issue in the processing queue that was limiting engine capacity when the engine was under a heavy load with
lots of execution tasks.

Disabled automatic restore of Nuget packages under the NCrunch console tool, as this can be performed much more efficiently using
a custom step on a build server.

Introduced a workaround to prevent NCrunch from triggering on false project change reports from Visual Studio.

Fixed an issue that was causing NCrunch to trigger every time a CPS project was built by Visual Studio, because VS builds recreate
the project.assets.json file every time they run.

Fixed a performance problem that was blocking up the engine when a large number of tests were removed at the same time.

Implemented a secondary cache file containing only execution times from prior test runs. This file is only used by NCrunch when
the primary cache file becomes invalid or is otherwise unavailable (i.e. during upgrades of NCrunch). It has a very stable
structure that is unlikely to change between versions of NCrunch. Using this file, the user experience on large codebases directly
after upgrades of NCrunch should be much improved.

Adjusted the grid connectivity protocol to significantly reduce the amount of data exchanged with grid nodes, especially when working
with large solutions. This should reduce network consumption and improve engine performance in general.

Fixed an issue that could cause NCrunch to continuously load project files under .NET Core, due to the generation of nCrunchTemp

Tweaked the test identification system to improve test discovery performance across all frameworks.

Introduced several minor optimisations to reduce drag on the engine.

Adjusted the processing queue internals to improve performance.

Improved performance when opening context menu items


Added support for .NET 4.7.1.

Fixed v3.11 regression that could potentially cause build exceptions for some projects.

Added a better error message for when NCrunch is used with Unity's version of NUnit.Framework, which is currently not supported.

Disabled concurrent garbage collection in the NCrunch test, build and engine processes. This should improve resource
efficiency and process stability, while reducing the potential for complex GC-related issues to appear with new framework releases.

Introduced a workaround for a platform-level issue where stack traces were not being correctly loaded from non-portable
PDBs on some systems under .NET Core 2.0.

Fixed a race condition in NCrunch's grid connectivity code that was causing intermittent disconnection from grid nodes during
heavy data transfer.

Introduced a speculative fix to try and resolve noise exceptions thrown when trying to repeatedly kill tasks executing on remote

Fixed an issue where the 'Preload assembly references' configuration setting was preventing Xunit v2 from discovering tests.

Adjusted NCrunch's handling of VBCSCompiler processor affinity to avoid crashing out when permissions to do this is denied.

Added grid node synchronisation handling for DotNetCliReferences.

Implemented a speculative fix to try and resolve rare IO exceptions when trying to restore NCrunch required nuget packages.

Fixed an issue where the grid node configuration tool would throw an exception on exit if the grid node service was not installed.

Fixed an issue that was causing NCrunch to explode with an exception when trying to assign CPU core affinity on machines with more
than 32 logical CPU cores.

Fixed an issue that was causing exceptions to be thrown during project load when a .NET Core project was loaded without any Nuget
packages referenced.

Adjusted NCrunch's handling of locked files during grid node synchronisation. When files on the grid node are locked, this will
now be reported as an error in the grid UI rather than just letting the node hang.

Introduced a speculative fix to try and resolve a rare exception that could appear sometimes on client reconnection to a grid node.

Fixed an issue where the console tool was not loading all global settings correctly.

Improved the handling of solutions containing recursive project references. When these are encountered, NCrunch will now give a
clean and tidy error in the Tests Window and will refuse to build the projects involved.

Fixed a dispatcher hole that could leave a thread hung during exit.

Adjusted NCrunch's test discovery system so that test categories are always sorted in alphabetical order, regardless of how the
test framework reports them.

Fixed an issue where hitting the ALT-TAB key while changing a configuration setting using a dropdown menu would crash the IDE.

The test window now remembers the splitter location again.

Fixed several serialization issues that were preventing Xunit from being able to work with certain types being used as theory
parameters under .NET Core.

Reduced indentation in the test window.

Fixed an issue that would cause exceptions to be thrown if the Metrics Window was opened, then closed, then the structure of a
project was changed.

Fixed an MSBuild binding redirection issue preventing from NCrunch from building many projects under VS2017.5

Fixed an issue where certain change sequences could cause desynchronisation exceptions when using grid processing, especially when
working with multi-targeted projects.

Fixed a theoretical synchronisation issue where certain change sequences could potentially cause the NCrunch engine to lose
internal dependency tracking, creating downstream instability.

Restructured NCrunch's handling of Nuget package directories so that these are no longer considered fixed to the
User\.nuget\packages directory, as it is now clear that Nuget package directories can be separately configured on a per-project
basis and can be in a range of different places depending on the install state of the machine. NCrunch should now also be able
to properly deal with multiple package directories. This should resolve a range of problems related to package discovery at
runtime, especially when using NCrunch over a grid or when automatically transferring packages to remote grid nodes.

Adjusted the tracing system around NCrunch task processes so that when the LogVerbosity is set to detailed, NCrunch will redirect
all process console output into its own log system. Under .NET Core, NCrunch will now also redirect .NET Core binding trace data
and capture this. These changes should make it much easier to analyse and diagnose process initialisation problems under .NET Core.

Adjusted the backing type of MSTest's TestContext so that this is now a Dictionary<string, object> rather than a Hashtable, as
a Dictionary type seems to be the standard instance of choice across versions of MSTest.

Adjusted the HTML report writer to avoid writing test output files for the HTML report if there is no trace data.

Fixed a hole in the UI error handling that could cause the IDE to crash if there is a problem in opening a coverage popup window.

Fixed an issue that was causing instability on grid nodes when working with client solutions specifying
'additional files for grid processing' using a relative path reaching above the solution root directory.

Fixed several dead-lock issues related to grid connection timeouts.

Fixed an issue that could cause instability in rare situations where tests underwent structural changes between sessions of NCrunch.

Fixed a potential crash issue when trying to place a null value into the clipboard.

Added a Shift-F10 handler to Coverage, Metrics, ProcessingQueue and TestWindow.

Fixed incorrect documentation hint message for FastLaneThreshold setting.

Fixed F# --keyfile under OtherFlags causing exceptions in NCrunch when this is specified in quotes.

Key files referenced in project XML are now automatically included in NCrunch workspaces regardless of whether the project includes
them as items.

Fixed an issue affecting assembly resolution when using AspNet.TestHost under .NET Core 2.0