Standalone NCrunch Now Available

by Remco 21. July 2014 13:24

One of the more popular feature requests for NCrunch lately has been to create a standalone version of NCrunch that can operate without Visual Studio.

I'm happy to say that this feature now exists!  There is now a headless version of NCrunch that works as a console tool, and can perform a single end-to-end run over a solution, writing the output as a series of useful reports including build results, test results and test coverage data.  The primary use case for this tool is on build/CI servers.  This means that you can now unlock the power of NCrunch as part of your build process, using parallel execution, distributed processing and metrics reporting as part of your centralised build.

As this tool is still in a beta state, it isn't yet available on the download page.  Instead, you can download it here:


For more information about this tool and what it can do, have a look at the console tool documentation page.  There's also a step-by-step guide to help you get it up and running.

I'm eager to hear from people putting this tool to use.  There's still more work going into the 2.8 build soon due for release, so there's a window of opportunity to refine this tool while it's still in beta.  Let me know what you think!


------------- Update 29th of July:

I've just updated the build above to also include suggested changes allowing people to specify their license details on the command line.  The license popup window was proving to be difficult to handle for many CI systems, so you can now specify the console tool license using:

ncrunch.exe /license "Joe Bloggs" 1234-1234-1234-1234-1234...


------------- Update 1st of August:

I've updated the build above again to include a fix for a problem people have been experiencing with the /license option on some servers.  This seems to have been related to the tool not correctly detecting the elevation status of the process, so it just kept trying to re-elevate itself.  The fix is in build


------------- Update 18st of August:

Another update to the above build includes a fix for a problem that was causing the tool to unnecessarily copy many dependencies from the Program Files directory.  This should improve performance of the tool for people using projects with lots of MS imports.


Comments (20) -

SeanKilleen United States
7/21/2014 9:19:51 PM #

Very cool announcement! Would love to use this tool in our CI process.

What will the licensing be for this specific tool? My team has two developers, each with a license. Will an additional license be needed for the "build server" user? I'm hoping not, because otherwise we'd currently have to stick with the free alternatives.

SeanKilleen United States
7/21/2014 9:21:39 PM #

Nevermind, sorry! Just read the licensing section of the documentation. Sorry for jumping the gun Smile I see that it requires an NCrunch license but not an additional one specific to the build server. Thanks for making that licensing decision!

Remco New Zealand
7/21/2014 9:35:48 PM #

You're welcome!  The intention was to try and make sure that everyone already using NCrunch would be able to freely pick it up and use it on their build servers.

JSkimming United Kingdom
7/23/2014 2:29:27 AM #

We'd like to use this with AppVeyor, but the need to run ncrunch.exe /license interactively makes it challenging, could the licence set-up be changed to 100% command line? I would understand if this option didn't support the 30-day evaluation license.

Remco New Zealand
7/23/2014 6:48:02 AM #

Thanks! I'll look into it Smile

JSkimming United Kingdom
7/29/2014 6:46:01 AM #

I've raised a suggestion with AppVeyor, and they seem keen:

We would love to integrate NCrunch with AppVeyor!

Remco New Zealand
7/29/2014 6:48:34 AM #

I'm happy to say that the full release of the console tool (v2.8) will include the ability to specify a license using the command-line (/license Name XXXX-XXXX-XXXX).  Was this the only blocking point for usage with AppVeyor?

JSkimming United Kingdom
7/29/2014 7:05:25 AM #

I don't know to be honest.

I recognised the interactive licence as a likely blocker as I believe AppVeyor only support silent custom installations using chocolatey, though they may add first class support (is in built support without a custom installation), as they have for xUnit, nUnit, and recently MSpec.

Either way, I think it's likely AppVeyor will need to add support for the XML format output by Standalone NCrunch, therefore, I imagine a schema for the XML would be useful.

I'll highlight your reply in the suggestion I raised and Feodor my post here himself, then you'll be getting it straight from the horse's mouth.

Remco New Zealand
7/29/2014 3:18:28 PM #

I've just included this modification in a new pre-release build.  Check the blog post above for an updated download link (build .25).

JSkimming United Kingdom
7/29/2014 7:32:01 PM #

Hi, the text of the links have been updated to, but the href is still By manually adjusting the URL I've been able to download, but you may want to further amend the blog post.

Remco New Zealand
7/29/2014 9:08:07 PM #

Oops!  Sorry about that.  Fixed now.

Jni Canada
8/4/2014 11:59:29 AM #


1 - the fix for the privilege elevation worked like a charm. Thanks for that.

2 - This is more than 140 chars, so no twitter this time Smile I'd like to know more about the possible exit codes. In particular, I'd like to distinguish between, say, a lack of license and a test fail. A few examples of different exit codes : Invalid license, cannot find solution, invalid arguments, Build failed, tests failed, output failed (i.e. access denied to /o). I think this would help a lot!

Thanks again!

Remco New Zealand
8/4/2014 1:21:42 PM #

Sure Smile

        OK = 0
        BuildFailure = 1
        TestFailure = 2
        GeneralFailure = 3
        LicenseFailure = 4

I'll also make a note to add these to the documentation.

damirault United States
8/17/2014 2:42:10 AM #

Very excited about the console tool version. Should help a lot on automatic verification. I'm running into a serious perf issue when running the console tool against my solution that I'm not seeing with the normal version of NCrunch.

When the console tool is running it is spending the vast majority of the time doing file IO creating and cleaning up workspaces (I estimate it at 15-20 minutes of a 25 minute run). The main culprit appears to be the copying 800MB of "Program Files (x86)\Microsoft SDKs\*" into 40ish of the 80ish workspaces generated and taking up 40 GBs of space at peak.

SDKs getting copied include:
-Cpp Azure Mobile SDK for Visual Studio 2013
-Cpp REST SDK for Visual Studio 2013
-Microsoft Azure
-RIA Services
-Windows Azure
-Windows Phone

I'm not sure why all of these SDKs are getting copied, since the projects don't make use of most of them, being a C# Asp.Net application against Azure. Definitely no Phone, C++, F#, Expression, LightSwitch, Silverlight.

As far as I can tell none of these SDKs get copied over to the workspaces that NCrunch generates while running inside VS. Ideally these files wouldn't be copied at all, but barring that, it seems like symlinking these static files instead of copying them would also be helpful. Is there also a way to preserve workspaces via the console tool, instead of them being fully generated and fully cleaned up every run?

Remco New Zealand
8/17/2014 10:06:25 AM #

Hi, thanks for sharing this!  Can you let me know the directory path that you are checking the source code out to?  Is this within Program Files (x86)?  If so, what happens if you move it somewhere else?

damirault United States
8/18/2014 3:11:48 AM #

The solution and code is in its own dedicated folder directly under C:\, not in Program Files or any system folders.

I do have the NCrunch WorkspaceBasePath set to C:\NCrunch to alleviate some issues with very long paths being generated during compile (however, I am using the same globalconfig between the console tool and VS).

Remco New Zealand
8/18/2014 11:48:04 AM #

Thanks!  I've now managed to reproduce and fix this problem.  It looks as though everyone was affected by it, although your situation may have been more extreme due to the number of Program Files dependencies in your solution.

Would you be able to try the updated download link above to see if this resolves the problem for you?

damirault United States
8/24/2014 1:24:13 PM #

Thanks, that worked great! The run went from 25 minutes to sub 5 minutes!

I am seeing an error when running the zip'd version of against my solution (it prints help fine). The MSI works fine and the old download of zip doesn't have the issue.

ERROR: System.IO.FileLoadException: Could not load file or assembly 'file:///c:\NCrunchCL\NCrunch Co
nsole Tool\nCrunch.DotNET451.dll' or one of its dependencies. Operation is not supported. (Exception
from HRESULT: 0x80131515)
File name: 'file:///c:\NCrunchCL\NCrunch Console Tool\nCrunch.DotNET451.dll' ---> System.NotSupporte
dException: An attempt was made to load an assembly from a network location which would have caused
the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Fr
amework does not enable CAS policy by default, so this load may be dangerous. If this load is not in
tended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.micros for more information.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence asse
mblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boole
an throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence
assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Bo
olean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence
assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFoun
d, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvide
nce, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppre
ssSecurityChecks, StackCrawlMark& stackMark)
   at System.Reflection.Assembly.LoadFrom(String assemblyFile)
   at nCrunch.Core.DotNET451AssemblyLoader.Register451Services()
   at nCrunch.VSAddIn.ServiceInitialiser.InitialiseServiceLocator(Boolean isVSRuntimeEnvironment, Bo
olean trackThreads, Boolean overrideEnabler)
   at #=qozn6N9i4T00mFfVcnblbUrQ870qCLIwiws0bu74ITM0=.#=q2TTDN1j2HOl3APerFkRjiZfqVBX0JWTw_NkgaSDQ7XM
=(#=qoBJrlSZ9AN$QUeqdpge9F4eRfoYbx_LsUCmm7HvyDAAdVn9YncKjhe9aH5vfDrjl #=qEEITlENGJrUh_fkjPEM5pg==, D
irectoryPath[] #=q2X5QT0$bWAQhIOT4YTD7Xxs7oZ1CBpRj6WFit8nfuQ8=)
   at #=qozn6N9i4T00mFfVcnblbUrQ870qCLIwiws0bu74ITM0=.#=qycvt0y1qYlDKS3OkXw0zdQ==(String[] #=qdMAlUJ

Remco New Zealand
8/24/2014 9:22:56 PM #

Interesting.  What is the operating system on the machine running the console tool?  And which versions of Visual Studio and .NET are installed on this box?

Is it possible that unzipping the file has caused the O/S to 'block' the extracted files?  Windows has a nasty habit of doing this when copying files out of an archive.  You often need to right click them, go to properties, then choose to 'Unblock' them.

damirault United States
8/25/2014 12:27:46 AM #

Blocking was indeed the issue! Re-downloaded and extracted the zip again (apparently in a slightly different way) and everything works. Thanks for the speedy responses!

Comments are closed

Month List