Changes in v2.8

Introduced a new headless version of NCrunch that can be run as a console tool.  This is useful for running NCrunch
inside a CI system.  For more information about this tool, refer to 
http://www.ncrunch.net/documentation/tools_console-tool

Introduced several changes to preserve debugger metadata through NCrunch's instrumentation.

Restructured the way in which NCrunch builds its test pipeline (the placement of test tasks in the processing queue).  
Previously, this was being done whenever a project was built, or whenever an analysis task had completed against a 
built assembly.  While this ensured that the engine would respond to any codebase changes, it had unintended 
side-effects including constant repopulation of the pipeline when multiple projects needed to be built.  This approach 
also created problems when working with distributed processing, as the remote grid nodes would cause the test pipeline 
to be created again and again each time they completed a project build.  NCrunch will now only queue tests for 
execution when it detects changes have been made to the code that would require tests to be queued.  This should 
greatly reduce the amount of unnecessary work performed by the engine and also improve its responsiveness when working 
with solutions with many thousands of tests.

Added support for NUnit Explicit tests.  These tests will now be detected and are runnable by NCrunch.  Explicit tests 
will not be run automatically be NCrunch and can only be run specifically with high priority.

Added new export options to the Tests Window supporting the following file formats:    
- XML test results file
- NUnit test results XML file
- Full HTML report (reports build and test results with coverage data in an interactive HTML report)

Extended NCrunch support for XUnit V2 to XUnit V2 beta 3 (.2700)

Fixed an issue that was causing NCrunch to always queue all tests for execution whenever the engine modes were 
adjusted - including tests that were excluded from automatic execution by the selected engine mode.

Split the 'Processing Time' Tests Window column into 3 separate new columns:    
- Last execution time: Describes the time taken during the last execution run of this test
- Total execution time: For child tests, this will always be the same as the last execution time.  For fixtures, this 
  will be the total time taken to execute the fixture with all its child tests.
- Expected execution time: Describes the time NCrunch expects for the test to execute over its next execution run.

Adjusted the 'Run all tests' options so that these will now queue tests with normal priority, instead of high priority.  
This makes sense as queuing all tests with high priority totally defeats the point of having a high priority in the 
first place.

Fixed a validation issue that was preventing people from specifying complicated 'Additional files to include' wildcards, 
such as '..\packages\DependencyPackage*\**.*'

Adjusted the 'Show coverage for selected test only' option so that when working with MSpec tests, this option will be 
automatically expanded to the entire MSpec context whenever it is used for any spec within this context.

Fixed an issue where stored trace output from re-executed tests was not always been properly cleaned up during NCrunch 
sessions.  This would lead to a noticeable increase in disk space consumption by the NCrunch cache directory when 
working with tests outputting vast amounts of trace data.

Fixed several state retention issues where NCrunch was losing vital data when projects were reloaded in VS.

Fixed NCrunch's handling of tests that share the same name but exist in different projects.  NCrunch was previously 
only discovering the first test and dropping any others with a matching name.  The handling is now what you would 
expect - the tests are all captured and uniquely identified by the engine, even though they may not show under 
distinctive names in the Tests window.

Fixed several issues where NCrunch's initialisation was being impacted by Visual Studio's asynchronous project 
loading.  The existing implementation was reliant on a giant race condition that depended on VS having completed 
loading of all projects by the time NCrunch had finished its initialisation.  Where this wasn't the case, relevant 
code coverage and test data was being lost by NCrunch.  The new initialisation structure should now prevent this 
from happening.

Adjusted the loading of code coverage data to improve initialisation performance.

Fixed an issue where adding an NCrunch-Ignored project to an already open solution would cause UI consistency issues.

Fixed an issue where NCrunch's test entry points could become misaligned when projects were reloaded.

Fixed an issue where the engine was not correctly re-indexing code coverage information for reloaded or updated 
projects.  This was causing a number of code coverage reporting and synchronisation issues.

Fixed an issue that was causing loss of code coverage information for open unsaved files in the IDE during a reset 
of the NCrunch engine.

Fixed an issue where the recorded execution time of timed out tests was being erroneously doubled.

Improved NCrunch's handling of workspace base paths pointing to non-existent drives.  NCrunch will now provide a 
meaningful build error when this happens.

Fixed a UI crash/performance issue that could be caused by tests with extremely long names.

Made the NCrunch.Framework binary CLS-compliant.

Fixed an issue that was preventing the Tests Window from correctly sorting data by server.

Watered down NCrunch's hyperlink colours to make them move visible in various colour schemes.

Added a scrollbar to the bug report submission window.

Fixed an issue that was causing the 'Restart remote grid server' option to fail for servers using the console host.

Fixed an issue where data inconsistencies could prevent the exception popup window from showing.

Introduced a speculative fix in an effort to resolve a possible problem where duplicate project references could 
cause NCrunch build failures.

Fixed an issue where CR/LR characters could cause the tree grid controls used by NCrunch to show data with a 
corrupted display.

Improved the internal handling of project load errors.

Fixed an issue where the MS test working directory was not always being set consistently where tests were using 
method-level DeploymentItems.

Adjusted the handling of missing files when synchronising data with grid nodes so that they won't cause the node to 
completely bug out.

Fixed an issue where connecting to a new grid node would result in all projects being rebuilt by other nodes.

Adjusted NCrunch's file system synchronisation to greatly reduce the number of directory locks being held.

Fixed some potential holes in the build optimisation that could prevent NCrunch from rebuilding referencing 
projects when it actually needed to.

Adjusted the names of NCrunch's instrumentation method calls so that they are prefixed with 'NCrunch'.  This 
should make these calls easier to identify if problems are ever encountered with the instrumentation.

Fixed an issue where the TestRunDirectory property was not being set on the MSTest test context.

Added an override to handle situations where tests are queued with a high priority, but local processing is 
disabled and no grid nodes are able to process them.  These tests will now be run on the local machine in the 
same manner as tests that are queued for debugging.

Fixed an issue where sometimes usage of Capabilities and/or test filters over distributed processing could result 
in the engine stalling and not executing all tests in the queue.

Adjusted the handling of errors thrown on remote grid nodes so that the timestamp of these errors is reported by 
the client in its own local timezone, rather than the timezone on the remote server.

Fixed a problem where menu item highlighting could cause colour scheme misalignment when using the 'Blue' VS theme.

Fixed an issue where usage of the 'dynamic' keyword in assemblies built by Roslyn would cause NCrunch to fail to 
read code coverage and symbol data.

Fixed an issue where CRs were not being correctly added into text copied out of the Tests Window output pane.

Adjusted the warning about missing files on the remote grid node so that it won't be mistaken for an error message.

Strengthened error handling in the grid messaging to stop NCrunch from taking out the VS process in the event of a 
connectivity issue.

Adjusted the Configuration/Platform error notation text to include a better description of this error and how to 
fix it.

Fixed an installer issue where the product name was not being correctly reported under UAC prompts.

Fixed an issue where build failures were being reported multiple times in the Tests Window status bar when working 
across a grid.

Added storage of project pass/fail state to the NCrunch cache file.

Adjusted the reporting of engine initialisation to include more information on the loading of cached data.

Adjusted the file system synchronisation code so that it will no longer attempt to synchronise updates to files on 
the file system that do not change actual file contents.  This should solve problems with tools that repeatedly 
trigger builds by touching files being watched by NCrunch.

Fixed an issue where Xunit V2 theories using InlineData with null parameter values would cause NCrunch's test runner 
to bug out.

Fixed an issue where NCrunch was not correctly handling Xunit V2 tests using a custom DisplayName.

Fixed several issues around the execution of Xunit V2 theories, especially those with custom data sources.

Fixed several issues related to file encoding preservation when using distributed processing.

Fixed an issue that was preventing NCrunch from executing FsUnit tests containing a period character.

Fixed an issue with the 'Project, Namespaces, Fixture, Test' Tests Window grouping, where tests existing without 
a namespace were not always being assigned to the correct project.

Adjusted the execution of Xunit V2 fixtures making use of custom TestOrderers so that all tests within these fixtures 
must run together within the same execution task.  This prevents the tests potentially being run out of order due 
to NCrunch separating them between execution tasks.    

Added support for file paths using forward slashes instead of backslashes.