{"record":{"id":"fc80a403ec2300e4","repo":"oraios/serena","slug":"roslyn-language-server-dll-not-found-after-extract","errorCode":null,"errorMessage":"Roslyn Language Server DLL not found after extraction","messagePattern":"Roslyn Language Server DLL not found after extraction","errorType":"exception","errorClass":"SolidLSPException","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/csharp_language_server.py","lineNumber":422,"sourceCode":"            package_version = lang_server_dep.package_version\n\n            server_dir = Path(self._ls_resources_dir) / f\"{package_name}.{package_version}\"\n            assert lang_server_dep.binary_name is not None\n            server_dll = server_dir / lang_server_dep.binary_name\n\n            if server_dll.exists():\n                log.info(f\"Using cached Roslyn Language Server from {server_dll}\")\n                return str(server_dll)\n\n            # Download and install the language server\n            log.info(f\"Downloading {package_name} version {package_version} from NuGet.org...\")\n            package_path = self._download_nuget_package(lang_server_dep)\n\n            # Extract and install\n            self._extract_language_server(lang_server_dep, package_path, server_dir)\n\n            if not server_dll.exists():\n                raise SolidLSPException(\"Roslyn Language Server DLL not found after extraction\")\n\n            # Make executable on Unix systems\n            if platform.system().lower() != \"windows\":\n                server_dll.chmod(0o755)\n\n            log.info(f\"Successfully installed Roslyn Language Server to {server_dll}\")\n            return str(server_dll)\n\n        @staticmethod\n        def _extract_language_server(lang_server_dep: RuntimeDependency, package_path: Path, server_dir: Path) -> None:\n            \"\"\"Extract language server files from downloaded package.\"\"\"\n            extract_path = lang_server_dep.extract_path or \"lib/net9.0\"\n            source_dir = package_path / extract_path\n\n            if not source_dir.exists():\n                # Try alternative locations\n                for possible_dir in [\n                    package_path / \"tools\" / \"net9.0\" / \"any\",","sourceCodeStart":404,"sourceCodeEnd":440,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/csharp_language_server.py#L404-L440","documentation":"Raised by _ensure_language_server after the Roslyn NuGet package was downloaded and extracted, but the expected Microsoft.CodeAnalysis.LanguageServer DLL still does not exist in the target directory. It means extraction succeeded at the filesystem level but did not place the server DLL where the code expects it.","triggerScenarios":"_ensure_server_installed -> _ensure_language_server when, after _download_nuget_package + _extract_language_server, server_dll.exists() is False — e.g. package layout changed upstream, extraction picked the wrong source dir, or a stale/corrupted cache was partially populated.","commonSituations":"A new Roslyn language server package version restructured its content directories, corrupted NuGet downloads, long-path issues on Windows truncating extraction, or leftover cache dirs from a previous failed install.","solutions":["Delete the language-server cache/resources directory and re-run to force a clean download+extraction","Check logs for the extraction step and verify the package version in the runtime dependency matches a known-good layout","Manually inspect the extracted package contents to confirm where the DLL landed","Upgrade the library if the upstream package layout changed and needs updated extraction logic"],"exampleFix":"// before\nrm -rf <ls_resources_dir>/microsoft.codeanalysis.languageserver*\n// after: rerun; verify\nfind <server_dir> -name 'Microsoft.CodeAnalysis.LanguageServer*.dll'","handlingStrategy":"retry","validationCode":"from pathlib import Path\nserver_dir = Path(ls_resources_dir) / \"roslyn\"\ndll = next(server_dir.rglob(\"Microsoft.CodeAnalysis.LanguageServer*.dll\"), None)\nif dll is None:\n    print(\"Roslyn DLL missing; clearing cache and reinstalling\")\n    import shutil; shutil.rmtree(server_dir, ignore_errors=True)\n","typeGuard":"def roslyn_dll_present(server_dir) -> bool:\n    from pathlib import Path\n    return any(Path(server_dir).rglob(\"Microsoft.CodeAnalysis.LanguageServer*.dll\"))\n","tryCatchPattern":"try:\n    ls._ensure_server_installed()\nexcept SolidLSPException as e:\n    if \"DLL not found after extraction\" in str(e):\n        shutil.rmtree(server_dir, ignore_errors=True)\n        ls._ensure_server_installed()  # clean reinstall\n    else:\n        raise\n","preventionTips":["Wipe the server cache directory when switching package versions","Keep the library updated when Roslyn package layouts change upstream","Watch extraction logs for warnings about skipped files (long paths on Windows)","Enable long paths on Windows to avoid truncated extractions"],"tags":["csharp","roslyn","installation","missing-file","nuget"],"backgroundTag":"package-extraction-missing-output","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}