{"record":{"id":"111adbf54dd58a1f","repo":"oraios/serena","slug":"could-not-find-language-server-files-in-package-s","errorCode":null,"errorMessage":"Could not find language server files in package. Searched in {package_path}","messagePattern":"Could not find language server files in package\\. Searched in (.+?)","errorType":"exception","errorClass":"SolidLSPException","httpStatus":null,"severity":"error","filePath":"src/solidlsp/language_servers/csharp_language_server.py","lineNumber":448,"sourceCode":"\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\",\n                    package_path / \"lib\" / \"net9.0\",\n                    package_path / \"contentFiles\" / \"any\" / \"net9.0\",\n                ]:\n                    if possible_dir.exists():\n                        source_dir = possible_dir\n                        break\n                else:\n                    raise SolidLSPException(f\"Could not find language server files in package. Searched in {package_path}\")\n\n            # Copy files to cache directory\n            server_dir.mkdir(parents=True, exist_ok=True)\n            shutil.copytree(source_dir, server_dir, dirs_exist_ok=True)\n\n        def _download_nuget_package(self, dependency: RuntimeDependency) -> Path:\n            \"\"\"\n            Download a NuGet package from NuGet.org and extract it.\n            Returns the path to the extracted package directory.\n            \"\"\"\n            package_name = dependency.package_name\n            package_version = dependency.package_version\n            url = dependency.url\n\n            if url is None:\n                raise SolidLSPException(f\"No URL specified for package {package_name} version {package_version}\")\n\n            package_extract_dir = Path(self._ls_resources_dir) / \"temp_downloads\" / f\"{package_name}.{package_version}\"","sourceCodeStart":430,"sourceCodeEnd":466,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/solidlsp/language_servers/csharp_language_server.py#L430-L466","documentation":"Raised by _extract_language_server when none of the well-known content directories (e.g. contentFiles/any/net9.0, etc.) exist inside the downloaded NuGet package, so there is no known source directory to copy the language server files from.","triggerScenarios":"_ensure_language_server -> _extract_language_server when the extracted NuGet package at package_path contains none of the expected directories (like 'contentFiles', 'lib/net9.0', 'content/any/net9.0') — usually because the package layout differs from what the code expects.","commonSituations":"NuGet package structure changed between Roslyn language server versions, a wrong/corrupt file was downloaded (e.g. an HTML error page saved as .nupkg and extracted), or a proxy mirror served a different package.","solutions":["Verify the downloaded package is a genuine NuGet nupkg (it should extract to directories like 'lib', 'contentFiles') and re-download if corrupt","Delete the temp download dir and retry to get a clean copy","Pin to a package version whose layout matches the library's expectations (check the RuntimeDependency version)","Upgrade the library so its known directory list covers the new package layout"],"exampleFix":"// before\n$ unzip -l roslyn.nupkg # only 'tools/' dir, no contentFiles\n// after: retry a known-good version, e.g. dependency.package_version = '4.x.x' with contentFiles/any/net9.0 layout","handlingStrategy":"validation","validationCode":"import zipfile\nfrom pathlib import Path\n\ndef nupkg_has_expected_layout(nupkg_path: str) -> bool:\n    expected = (\"contentFiles/\", \"lib/\")\n    with zipfile.ZipFile(nupkg_path) as z:\n        names = z.namelist()\n    return any(n.startswith(e) for n in names for e in expected)\n","typeGuard":"def package_has_content_dirs(package_path) -> bool:\n    from pathlib import Path\n    p = Path(package_path)\n    candidates = [p / \"contentFiles\" / \"any\" / \"net9.0\", p / \"lib\" / \"net9.0\"]\n    return any(c.is_dir() for c in candidates)\n","tryCatchPattern":"try:\n    ls._ensure_server_installed()\nexcept SolidLSPException as e:\n    if \"Could not find language server files in package\" in str(e):\n        shutil.rmtree(temp_download_dir, ignore_errors=True)\n        ls._ensure_server_installed()  # re-download a clean package\n    else:\n        raise\n","preventionTips":["Pin a Roslyn package version known to have the expected contentFiles layout","Validate downloaded nupkg files (zip magic, size) before extraction","Clear temp_downloads after failures so corrupt packages are not reused","Re-download rather than reuse packages served through caching proxies"],"tags":["csharp","nuget","extraction","package-layout"],"backgroundTag":"package-extraction-missing-output","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}