I've looked into this issue in more detail, and I feel it's worth adding some notes here for anyone impacted by it. My initial understanding of this problem was wrong.
The generation of the .EXE stub for application based projects in newer versions of .NET is handled by a chain of build steps that are dependent on the MSBuild UseAppHost property. By default, this property is enabled for your normal build, which means that MSBuild will generate and include files that are needed to run your application directly from the bin\debug directory.
NCrunch specifically disables this property (UseAppHost=false) because the build steps do much more than just generate the stub .EXE file, such as adding an implicit dependency on Microsoft.NETCore.App.Host.*, which cannot be easily identified up front when loading the project and thus may not be present on any grid nodes being used to execute the tests. Normally under NCrunch, the app host complexity isn't needed because we build the test environment without it, so it's basically just slowing down the build and potentially causing compatibility issues with grid processing.
However, it's accepted that this can cause problems for people that have tests relying on the .EXE files. So it's possible to force NCrunch to leave the setting enabled so that the files can be generated. To do this, just add a
custom build property to the project being built, setting UseAppHost=true. This will override NCrunch's behaviour and you'll get your .EXE. The Copy Referenced Assemblies To Workspace setting will also consider it and appropriately copy it when needed.
I cannot warrant you won't experience downstream problems by enabling this behaviour under NCrunch though .. we do disable it for a reason.