{"record":{"id":"531836cb73eed63b","repo":"dotnet/reactive","slug":"plugins-folder-not-found-pluginsfolder-fullname","errorCode":null,"errorMessage":"PlugIns folder not found: {plugInsFolder.FullName}","messagePattern":"PlugIns folder not found: (.+?)","errorType":"exception","errorClass":"DirectoryNotFoundException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostDriver/PlugInHost.cs","lineNumber":94,"sourceCode":"                // .NET Core or .NET 5+\n                launcher = \"PlugIn.HostDotnet\";\n            }\n            else\n            {\n                // .NET Framework\n                launcher = \"PlugIn.HostNetFx\";\n            }\n        }\n        else\n        {\n            throw new ArgumentException($\"Unsupported host runtime TFM: {hostRuntimeTfm}\");\n        }\n\n        DirectoryInfo plugInsFolder = new(\n            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(","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Test/Gauntlet/Checks/PlugIns/PlugIn.HostDriver/PlugInHost.cs#L76-L112","documentation":"PlugInHost.Run expects the plug-ins folder to sit a fixed relative distance (../../../../) from the host driver's base directory; if that directory doesn't exist it throws DirectoryNotFoundException 'PlugIns folder not found'.","triggerScenarios":"Running the PlugIn.HostDriver from a location where four directories up is not the repository's plug-ins root (different output layout, published/single-folder deploy, custom output path).","commonSituations":"Running the driver from a different working directory or build configuration, moving the host binary, or CI checkouts with different depth/paths than the assumed relative layout.","solutions":["Build and run the driver via the standard solution layout so the ../../../../ path resolves to the plug-ins folder","Pass a correct/overridable plug-ins path or update PlugInHost to compute it from the solution root","Verify the directory exists at the resolved path before running"],"exampleFix":"// before\ndotnet PlugIn.HostDriver/bin/Debug/net6.0/PlugIn.HostDriver.dll  // run from odd location\n// after\n// run from the expected build layout, or set the plug-ins root explicitly in PlugInHost\nDirectoryInfo plugInsFolder = new(Path.Combine(AppContext.BaseDirectory, plugInsRootOverride ?? \"../../../../\"));","handlingStrategy":"validation","validationCode":"var plugIns = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, \"../../../../\"));\nif (!Directory.Exists(plugIns)) throw new DirectoryNotFoundException($\"PlugIns folder not found: {plugIns}\");","typeGuard":null,"tryCatchPattern":"try { await host.Run(tfm); }\ncatch (DirectoryNotFoundException ex) when (ex.Message.Contains(\"PlugIns folder not found\")) { /* run from standard layout or fix path override */ }","preventionTips":["Run host drivers from their build output in the standard repo layout","Make the plug-ins root configurable instead of hardcoding ../../../../","Sanity-check paths in CI before invoking checks"],"tags":["rx","test-infrastructure","path-resolution","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"}