I wound up building an xUnit console test runner in C# to cycle through and run all the xUnit test assemblies in a given folder.
The structure I wound up with was the xUnit test runner, named RunXUnitTests, in a folder one level above the test assemblies, with the executable and the assorted support dlls it needed. For example NLog logging support and some email support dlls for sending out a results email were in this RunXUnitTests folder.
Immediately under the RunXUnitTests test runner folder, there is a "TestAssemblies" folder, and all the xUnit test assembly dlls went in that folder, along with whatever supporting dlls were required by the tests themselves. Also, all the xunit.console.exe runtime files were in the TestAssemblies folder. It was least confusing to have all the tests and their dependencies in the same TestAssemblies folder, separate from the test runner.
To run the tests, from the console, the C# test runner app would submit command lines to the System.Diagnostics process execution API, with the xunit.console.exe command as the process to run, and the test assembly and the (xml) results file as command line parameters.
A typical command line, for Operational Readiness Tests (ORT), that was formatted by the test runner, and submitted to a process.Start() method call (where the process object is of type System.Diagnostics.Process), is as below:
"C:\RunXUnitTests\TestAssemblies\xunit.console.exe" "C:\RunXUnitTests\TestAssemblies\SharePointBasicFeaturesORT.dll" -xml "C:\Users\Public\Documents\TestResults\SharePointBasicFeaturesORT.xml"
After the tests ran, the test runner program had some routines to spin through the XML results files, extract the results, format a results summary email (in HTML), and send the email to a distribution list.
I should mention that all this is packaged up into installable MSI files that can be deployed to Windows 7/10 PCs or VMs for test runs. We are using it to run SpecFlow+xUnit "Operational Readiness Tests" on our web applications on a scheduled daily basis. We used the Wix# ("WixSharp") installer to build our installers in C# and then have the Wix Installation Toolset build standard MSI installer files. See https://github.com/oleg-shilo/wixsharp for more info and the source and binaries. It works very well once you get the hang of it.
Yes, it's a fair amount of work to do this way. I wouldn't recommend it if your organization already has other DevOps type tools that can do this work, e.g., Jenkins, TeamCity, Bamboo, Azure for DevOps etc. My organization is still "in process" on bringing in such tools, and it was more doable in the near term to evolve the test runner than to get organizational decisions, financial commitment, and installation and configuration support for DevOps/CI tooling.
If you don't have ready access to DevOps/CI tools, this type of approach uses freely available open source tools (aside from paid versions of MS Visual Studio; I don't know what the community editions do and don't work for) and is workable as a bridge to a more sophisticated environment.