dotnet/reactive · error · DirectoryNotFoundException

PlugIn host project folder not found at

Error message

PlugIn host project folder not found at {plugInHostProjectFolder}

What it means

Directory check in PlugInHost.Run: the computed plug-in host project folder (plugInsFolder + launcher path) does not exist on disk, so the Gauntlet plug-in host cannot be launched; the offending input is the derived launcher subpath.

Solutions

  1. Ensure all PlugIn host launcher projects are present in the checkout
  2. Fix the launcher name mapping in PlugInHost so it matches the actual project folder name
  3. Restore/re-clone the repository to get the missing project folder

Example fix

// before
throw new DirectoryNotFoundException($"PlugIn host project folder not found at {plugInHostProjectFolder}"); // folder 'PlugIn.HostNetFx' missing
// after
git checkout -- Rx.NET/Test/Gauntlet/Checks/PlugIns  // or rebuild solution so host project folders exist
Defensive patterns

Strategy: validation

Validate before calling

var projDir = Path.Combine(plugInsRoot, launcher);
if (!Directory.Exists(projDir)) throw new DirectoryNotFoundException($"Missing launcher project folder: {projDir}");

Try / catch

try { await host.Run(tfm); }
catch (DirectoryNotFoundException ex) when (ex.Message.Contains("host project folder not found")) { /* restore checkout / fix launcher name */ }

Prevention

When it happens

Trigger: The plug-ins folder exists but does not contain the project directory for the launcher selected from hostRuntimeTfm (folder renamed, launcher project excluded from the build/checkout).

Common situations: Partial checkouts, renamed host projects, or a TFM mapping to a launcher project that was not restored/built in this workspace.

Related errors


AI-assisted analysis of dotnet/reactive@94b5d5ab91 (2026-09-15). Data as JSON: /api/errors/f934a56c40ba09c1. Report an issue: GitHub.

Appendix: source

Thrown at Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostDriver/PlugInHost.cs:102

        }
        else
        {
            throw new ArgumentException($"Unsupported host runtime TFM: {hostRuntimeTfm}");
        }

        DirectoryInfo plugInsFolder = new(
            Path.Combine(AppContext.BaseDirectory, "../../../../"));
        if (!plugInsFolder.Exists)
        {
            throw new DirectoryNotFoundException($"PlugIns folder not found: {plugInsFolder.FullName}");
        }

        var plugInHostProjectFolder = Path.Combine(
            plugInsFolder.FullName,
            launcher);
        if (!Directory.Exists(plugInHostProjectFolder))
        {
            throw new DirectoryNotFoundException($"PlugIn host project folder not found at {plugInHostProjectFolder}");
        }
        var plugInHostExecutableFolder = Path.Combine(
            plugInHostProjectFolder,
            $"bin/{Configuration}/{hostRuntimeTfm}/");
        if (!Directory.Exists(plugInHostExecutableFolder))
        {
            throw new DirectoryNotFoundException($"PlugIn host build output folder not found at {plugInHostExecutableFolder}");
        }

        var plugInHostExecutablePath = Path.Combine(
            plugInHostExecutableFolder,
            $"{launcher}.exe");
        if (!File.Exists(plugInHostExecutablePath))
        {
            throw new FileNotFoundException($"PlugIn host executable not found at {plugInHostExecutablePath}");
        }

        var firstPlugInPath = await _plugInBuilder.GetPlugInDllPathAsync(firstPlugIn);

View on GitHub (pinned to 94b5d5ab91)