oraios/serena · error · SolidLSPException

No URL specified for package {package_name} version {package

Error message

No URL specified for package {package_name} version {package_version}

What it means

Raised by _download_nuget_package when the runtime dependency for the Roslyn language server has url=None. The downloader needs a direct download URL for the NuGet package; a dependency definition without one cannot be fetched.

Source

Thrown at src/solidlsp/language_servers/csharp_language_server.py:464

                        break
                else:
                    raise SolidLSPException(f"Could not find language server files in package. Searched in {package_path}")

            # Copy files to cache directory
            server_dir.mkdir(parents=True, exist_ok=True)
            shutil.copytree(source_dir, server_dir, dirs_exist_ok=True)

        def _download_nuget_package(self, dependency: RuntimeDependency) -> Path:
            """
            Download a NuGet package from NuGet.org and extract it.
            Returns the path to the extracted package directory.
            """
            package_name = dependency.package_name
            package_version = dependency.package_version
            url = dependency.url

            if url is None:
                raise SolidLSPException(f"No URL specified for package {package_name} version {package_version}")

            package_extract_dir = Path(self._ls_resources_dir) / "temp_downloads" / f"{package_name}.{package_version}"
            projected_path = package_extract_dir / (dependency.extract_path or "") / ROSLYN_LONGEST_KNOWN_PACKAGE_MEMBER
            if platform.system() == "Windows" and len(str(projected_path)) >= WINDOWS_MAX_PATH:
                log.warning("Using a short temporary directory for Roslyn package extraction because the configured cache path is too deep")
                package_extract_dir = Path(tempfile.mkdtemp(prefix="serena-roslyn-")) / package_extract_dir.name
            package_extract_dir.parent.mkdir(parents=True, exist_ok=True)

            try:
                log.debug(f"Downloading package from: {url}")
                FileUtils.download_and_extract_archive_verified(
                    url,
                    str(package_extract_dir),
                    "zip",
                    expected_sha256=dependency.sha256,
                    allowed_hosts=dependency.allowed_hosts,
                )

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Add the direct NuGet.org download URL to the RuntimeDependency entry, e.g. https://www.nuget.org/api/v2/package/{package_name}/{package_version}
  2. Restore the default runtime-dependency configuration if it was overridden
  3. Upgrade the library if this is a missing-URL bug for your platform

Example fix

// before
RuntimeDependency(package_name='microsoft.codeanalysis.languageserver', package_version='4.x', url=None)
// after
RuntimeDependency(package_name='microsoft.codeanalysis.languageserver', package_version='4.x', url='https://www.nuget.org/api/v2/package/microsoft.codeanalysis.languageserver/4.x')
Defensive patterns

Strategy: validation

Validate before calling

dep = collection.get_single_dep_for_current_platform()
if not dep.get("url"):
    raise SystemExit(
        f"RuntimeDependency {dep.get('package_name')}@{dep.get('package_version')} has no url; "
        "set it to https://www.nuget.org/api/v2/package/{package_name}/{package_version}"
    )

Type guard

def dep_has_download_url(dep) -> bool:
    return bool(getattr(dep, "url", None)) and str(dep.url).startswith(("http://", "https://"))

Try / catch

try:
    ls._ensure_server_installed()
except SolidLSPException as e:
    if "No URL specified for package" in str(e):
        dep.url = f"https://www.nuget.org/api/v2/package/{dep.package_name}/{dep.package_version}"
        ls._ensure_server_installed()
    else:
        raise

Prevention

When it happens

Trigger: _ensure_language_server -> _download_nuget_package with a RuntimeDependency whose 'url' field is None — e.g. a custom/overridden dependency entry, or a platform entry that only defines package_name/package_version.

Common situations: Users overriding the default runtime-dependency table and forgetting the url, or a library version where the URL wasn't populated for the current platform.

Related errors


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/13a1be917ad400f9. Report an issue: GitHub.