{"record":{"id":"458814e25b6f0404","repo":"dotnet/reactive","slug":"plugin-host-build-output-folder-not-found-at","errorCode":null,"errorMessage":"PlugIn host build output folder not found at {plugInHostExecutableFolder}","messagePattern":"PlugIn host build output folder not found at (.+?)","errorType":"exception","errorClass":"DirectoryNotFoundException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostDriver/PlugInHost.cs","lineNumber":109,"sourceCode":"            Path.Combine(AppContext.BaseDirectory, \"../../../../\"));\n        if (!plugInsFolder.Exists)\n        {\n            throw new DirectoryNotFoundException($\"PlugIns folder not found: {plugInsFolder.FullName}\");\n        }\n\n        var plugInHostProjectFolder = Path.Combine(\n            plugInsFolder.FullName,\n            launcher);\n        if (!Directory.Exists(plugInHostProjectFolder))\n        {\n            throw new DirectoryNotFoundException($\"PlugIn host project folder not found at {plugInHostProjectFolder}\");\n        }\n        var plugInHostExecutableFolder = Path.Combine(\n            plugInHostProjectFolder,\n            $\"bin/{Configuration}/{hostRuntimeTfm}/\");\n        if (!Directory.Exists(plugInHostExecutableFolder))\n        {\n            throw new DirectoryNotFoundException($\"PlugIn host build output folder not found at {plugInHostExecutableFolder}\");\n        }\n\n        var plugInHostExecutablePath = Path.Combine(\n            plugInHostExecutableFolder,\n            $\"{launcher}.exe\");\n        if (!File.Exists(plugInHostExecutablePath))\n        {\n            throw new FileNotFoundException($\"PlugIn host executable not found at {plugInHostExecutablePath}\");\n        }\n\n        var firstPlugInPath = await _plugInBuilder.GetPlugInDllPathAsync(firstPlugIn);\n        var secondPlugInPath = await _plugInBuilder.GetPlugInDllPathAsync(secondPlugIn);\n\n        var startInfo = new ProcessStartInfo\n        {\n            FileName = plugInHostExecutablePath,\n            RedirectStandardOutput = true,\n            UseShellExecute = false,","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostDriver/PlugInHost.cs#L91-L127","documentation":"PlugInHost.Run computes the host executable folder (bin/{Configuration}/{hostRuntimeTfm}/) and throws DirectoryNotFoundException when that build output folder is missing, meaning the launcher project was not built for the requested configuration and TFM.","triggerScenarios":"Running the Gauntlet plug-in check for a configuration/TFM combination that was never built (e.g. Release output absent, or the specific net4x folder not produced).","commonSituations":"Building only Debug but running with Configuration=Release, a TFM whose host project doesn't target it, or cleaning output before the check.","solutions":["Build the launcher project for the exact Configuration and TFM being requested (e.g. dotnet build -c Release -f net46)","Run the check with a configuration/TFM that has build output","Verify bin/{Configuration}/{hostRuntimeTfm}/ exists for the launcher before running"],"exampleFix":"// before\nvar result = await host.Run(\"net46\"); // bin/Release/net46 missing\n// after\ndotnet build Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostNetFx -c Release -f net46\nvar result = await host.Run(\"net46\");","handlingStrategy":"validation","validationCode":"var outDir = Path.Combine(plugInsRoot, launcher, $\"bin/{Configuration}/{hostRuntimeTfm}/\");\nif (!Directory.Exists(outDir)) throw new DirectoryNotFoundException($\"Build the host first: {outDir}\");","typeGuard":null,"tryCatchPattern":"try { await host.Run(tfm); }\ncatch (DirectoryNotFoundException ex) when (ex.Message.Contains(\"build output folder not found\")) { /* rebuild for this Configuration/TFM */ }","preventionTips":["Build the launcher for the exact Configuration and TFM requested","Use consistent Configuration (Debug/Release) across build and test steps","Avoid cleaning outputs between build and check phases"],"tags":["rx","test-infrastructure","build-output","gauntlet"],"backgroundTag":"directory-not-found","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}