Thanks for sharing this list of issues. I've added a task to examine performance around the configuration window in setting the platform/configuration values for multiple projects. The behaviour you've described (sluggish performance in text box) is not by design, so this is definitely worth looking at.
The rest of the behaviour you've described is symptomatic of core engine overload, probably because of too many files are being included in the solution-level additional files to include. Can you give me a rough estimate of how many files you've included here? The main issue with specifying the 'additional files to include' value at solution level is that this value will then be propagated to ALL projects in your solution. NCrunch's engine pulls projects out of their parent solution when creating workspaces for these projects (see
Project Atomicity for more information about this). This means that the files will be duplicated many times over inside NCrunch's workspace, and it will create huge overhead for NCrunch to track so many files as being part of the solution.
So if you have 10,000 C++ headers and libraries included using a solution-level include setting, then you'll have 25*10000= 250,000 extra files that will exist in the NCrunch workspaces. These files all need to be tracked and managed.
In this situation, I can suggest the following options:
- Reduce the number of files being included. My guess is that the files you have listed under External Dependencies have been bulk copied. If so, there may be opportunities to cut down the selection to include only the files that these projects absolutely need in order to build.
- Avoid including the files at solution level, including them only at project level for the projects that absolutely require them. If you only have 5 projects out of 25 that require these files, you can save the engine much work by specifying the 'additional files to include' at project level for these 5 projects only.
- Consider moving these files out of the solution and referencing them using absolute paths (perhaps with an environment variable of some kind if the location is different across your team?). Usually I end up recommending the opposite of this, but if there are many files or they're particularly large in size, referencing them using relative paths creates much work for the engine as all the files need to be replicated again and again inside the workspaces. If you treat them as an SDK reference located using an absolute path, the engine doesn't need to care about them or include them in the workspaces. My guess, however, is that you've included these files inside the solution for a good reason so this option probably won't appeal to you.
- The least favourable option but still an option: If you set the 'Ignore this project completely' on the C++/CLI projects in your solution, NCrunch will not process them in any way. Setting up Assembly References (as opposed to Project References) to the output of these projects from other projects in your solution will allow NCrunch to continue to build the rest of your projects without any real knowledge of the C++/CLI projects or any need to build them. Because NCrunch doesn't provide code coverage information for C++/CLI anyway, this may be worth a look.. but it will force you to do constant rebuilds of your foreground solution if you're working heavily in the C++/CLI projects.
I expect that NCrunch V1 will likely exhibit similar issues to what you've described, and it may actually be worse (V2 includes many optimisations over V1). You're welcome to take it for a spin, but I would generally recommend sticking with V2 if at all possible.
Cheers,
Remco