oraios/serena · error · SolidLSPException
Roslyn Language Server DLL not found after extraction
Error message
Roslyn Language Server DLL not found after extraction
What it means
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.
Source
Thrown at src/solidlsp/language_servers/csharp_language_server.py:422
package_version = lang_server_dep.package_version
server_dir = Path(self._ls_resources_dir) / f"{package_name}.{package_version}"
assert lang_server_dep.binary_name is not None
server_dll = server_dir / lang_server_dep.binary_name
if server_dll.exists():
log.info(f"Using cached Roslyn Language Server from {server_dll}")
return str(server_dll)
# Download and install the language server
log.info(f"Downloading {package_name} version {package_version} from NuGet.org...")
package_path = self._download_nuget_package(lang_server_dep)
# Extract and install
self._extract_language_server(lang_server_dep, package_path, server_dir)
if not server_dll.exists():
raise SolidLSPException("Roslyn Language Server DLL not found after extraction")
# Make executable on Unix systems
if platform.system().lower() != "windows":
server_dll.chmod(0o755)
log.info(f"Successfully installed Roslyn Language Server to {server_dll}")
return str(server_dll)
@staticmethod
def _extract_language_server(lang_server_dep: RuntimeDependency, package_path: Path, server_dir: Path) -> None:
"""Extract language server files from downloaded package."""
extract_path = lang_server_dep.extract_path or "lib/net9.0"
source_dir = package_path / extract_path
if not source_dir.exists():
# Try alternative locations
for possible_dir in [
package_path / "tools" / "net9.0" / "any",View on GitHub (pinned to 7fcbca7e62)
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
Example fix
// before rm -rf <ls_resources_dir>/microsoft.codeanalysis.languageserver* // after: rerun; verify find <server_dir> -name 'Microsoft.CodeAnalysis.LanguageServer*.dll'
Defensive patterns
Strategy: retry
Validate before calling
from pathlib import Path
server_dir = Path(ls_resources_dir) / "roslyn"
dll = next(server_dir.rglob("Microsoft.CodeAnalysis.LanguageServer*.dll"), None)
if dll is None:
print("Roslyn DLL missing; clearing cache and reinstalling")
import shutil; shutil.rmtree(server_dir, ignore_errors=True)
Type guard
def roslyn_dll_present(server_dir) -> bool:
from pathlib import Path
return any(Path(server_dir).rglob("Microsoft.CodeAnalysis.LanguageServer*.dll"))
Try / catch
try:
ls._ensure_server_installed()
except SolidLSPException as e:
if "DLL not found after extraction" in str(e):
shutil.rmtree(server_dir, ignore_errors=True)
ls._ensure_server_installed() # clean reinstall
else:
raise
Prevention
- 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
When it happens
Trigger: _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.
Common situations: 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.
Related errors
- Memory maintenance template not found at {template_path}
- Download failed? Could not find clojure-lsp executable at {c
- Could not find language server files in package. Searched in
- No URL specified for package {package_name} version {package
- Failed to download package {package_name} version {package_v
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/fc80a403ec2300e4.
Report an issue: GitHub.