Changes in v5.13

*****
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.
*****
- Updated Rider integration to 2025.1.
- Added support for .slnx solution files
- Added support for DataRow based tests using generics under MSTest v3.8
- Added support for DynamicData tests using single dimensional array data sources under MSTest
- Added support for TestDataRow dynamic data tests under MSTest v3.8
- Added support for ignoring data rows and dynamic data test cases under MSTest v3.8
- Added support for dynamic data tests using multiple data sources under MSTest
- Added support for dynamic data tests auto-detection property/method based data sources under MSTest v3.8
- Implemented support for MSTest v3.8's RetryAttribute. NCrunch's implementation of this attribute differs slightly from MSTest/VSTest's one:
- Custom implementations of this attribute (descending from RetryAttributeBase) are not supported by NCrunch. You'll need to implement custom retry logic in your own test code.
- Test timeouts are considered to span all retries of the test marked with the attribute. This means that if a test takes 30 seconds for 3 tries and the test timeout is set to 60 seconds, the test will time out before completing the third try.
- NCrunch will track and report results for ALL retries of the test in the trace output, test coverage and RDI.
- It's recommended that before using this attribute, you first attempt to resolve the flakyness of the test using churn mode and RDI. RetryAttribute is a band-aid that should be avoided if possible.
- Fixed an issue where line mapping for RDI control flow points inside inner scopes was not working correctly when the control flow origin was outside the destination scope. This could cause gaps to appear in RDI control flow popups.
- Restructured the aggregation of code coverage for editor windows that share their document across multiple projects. This should significantly improve engine performance when working on large multi-targeted code bases, particularly when many editor windows are open.
- Fixed an issue that was causing analysis tasks to hang when working with Xunit3 projects that were multitargeting net48 along with newer frameworks
- Disabled synchronous message reporting for Xunit3 test discovery runs, as this is only required for execution (not discovery) and seems to cause some performance problems when Xunit3 is reporting large numbers of tests.
- Fixed an issue that was preventing xunit3 assembly overrides from working correctly for all xunit3 dependencies
- Implemented a speculative fix to resolve problems affecting resolution of Unity assemblies that are stored under Program Files.
- Fixed instability and exceptions when changing configuration for multiple multi-targeted projects at the same time
- Implemented a speculative fix to resolve exceptions sometimes thrown when navigating between RDI frames under Rider.
- Fixed exceptions thrown and instability when renaming a file to a different case (but the same name) in Rider.
- Implemented a speculative fix to resolve code coverage mapping exceptions caused by exception paths with strange line indexes
- Implemented a speculative fix for the distributed processing window failing to correctly show details on systems without WMIC.exe installed
- Adjusted the handling of CPU core settings so that when reading CPU cores for application, NCrunch will now ignore cores that are configured in the setting but do not physically exist on the machine. This should resolve issues with invalid CPU core configuration causing internal problems and exceptions.
- Adjusted the console tool so that it shows clearer indication of the need for NCrunchCacheStoragePath to be specified before the tool can be used.
- Adjusted instrumentation so that when NCrunch encounters a method enclosed in 'no coverage' inline directives, it will place no instrumentation call at all in the method. This should be useful when trying to prevent the JIT from trying to load NCrunch assemblies at critical points in the source, for example, when trying to establish an assembly loading system in a testing sub-process.
- Fixed a performance problem where attempting to control process CPU affinity on machines with many running processes and threads could cause the O/S to become a bottleneck, degrading engine performance.
- Adjusted the behaviour of the logging system on machine with more than 32 runner threads, so that the internal log will not store log data that is more detailed than the current configured log verbosity. Normally, we want this data to be captured in the background log so that it can be made available for NCrunch bug reports (which are very helpful for troubleshooting). Unfortunately, when the engine is running with a large number of execution threads, the log system becomes a point of contention that can significantly reduce performance. This means that if you want to submit useful bug reports on a system with more than 32 runners, you will need to adjust your log verbosity first.
- Fixed .NET Core and .NET 5+ task runners not correctly self-terminating when the NCrunch engine is unexpectedly terminated.
- Amended the NUnit3 unstable test generation error so that when this happens the NUnit output from the test discovery run will be reported with the error.
- Adjusted CPU controls so that the first CPU cores are now given to the IDE, and the later ones to NCrunch (it used to be the opposite). This should ensure that on systems with performance vs efficient cores, the performance cores go to the IDE first.
- Fixed an issue that could cause instability and CPU core control failure when working with CPU core assignments that exceed the number of processor cores on the machine.
- Fixed a potential crash issue caused by Tests Window clipboard copy/paste under Rider.
- Rebuilt the CPU affinity assignment system to provide better handling for systems with more than 64 CPU cores across multiple processor groups.
- Fixed inability to work with projects consisting of only a single self-terminated Project tag.
- Fixed RDI overlays blinking erratically for several seconds after being opened in Rider
- Introduced a range of changes to improve stability and performance in the RDI overlay under Rider
- Fixed exception thrown when trying to search RDI data point values in an aggregated frameset through a placeholder marker
- Fixed an RDI index log corruption issue that could cause exceptions to be thrown when reading frames.
- Fixed RDI overlays not rendering correctly when working far down in long source files under Rider with CodeVision enabled
- Adjusted RDI control flow popups so that when these are shown close to the bottom of the rendered area, they will instead be shown above the marker with the arrow pointing upwards. This should greatly improve clarity when working at the bottom of the screen, or when using very large popups.
- Adjusted RDI data search popups so that when these are being opened at the bottom of the rendered area, they are automatically moved 100 pixels upward to give more room to show their contents.
- Fixed RDI data point value search popup not rendering in the correct horizontal position under Rider
- Implemented an additional verification step for RDI storage on grid nodes. When the last client disconnects from a grid node server, the server will now perform a full check of its RDI storage directories to ensure its tracked sizing is up to date with the contents on disk. This should help to mitigate problems caused by the server losing effective tracking of file sizes on disk.
- Fixed an issue where renaming an open source file in Rider could cause downstream instability in the UI.
- Fixed a coverage mapping exception that could cause coverage data to be lost
- Fixed NCrunch failing to start when opening a project file without a solution under Rider
- Fixed inability to open RDI overlays in Rider when a source file has been renamed with an open overlay in it
- Removed RDI mouse events from the log file under Rider, to reduce clutter.
- Fixed an issue where the NCrunch enginehost would be left hanging around after Rider was closed, if the engine was never started during the session
- Fixed a hung thread that could potentially prevent NCrunch processes from cleanly terminating
- Fixed Tests Window not showing all solution engine modes when opening a solution under Rider with the engine disabled
- Fixed a regression that could causing splitter alignment issues in Rider in the Tests Window when the splitter was set to show vertically.