Skip to content

C# Language Server fails to initialize: .NET 10.0 requirement blocks Unity projects on macOS ARM64 #1014

Description

@IJsLauw

Labels

bug, C#, language-server, Unity

Description

Summary

Serena's C# language server (via SolidLSP) attempts to install .NET 10.0 runtime, which doesn't exist yet (still in Preview), causing language server initialization to fail for Unity projects that require .NET 6.0/Standard 2.1 compatibility.

Environment

  • OS: macOS 14.x (Apple Silicon ARM64)
  • Serena: via Claude Code plugin (latest)
  • Project: Unity 6000.3.5f2 (C# 9, .NET Standard 2.1)
  • Installed .NET: 6.0.102 SDK + 6.0.2 Runtime (ARM64)
  • OmniSharp: 1.39.15 (manually installed, ARM64)

Steps to Reproduce

  1. Install Serena plugin in Claude Code
  2. Create/open a Unity project (C# with .NET Standard 2.1 or .NET 6.0 target)
  3. Create .serena/config.toml in project root:
    [project]
    name = "MyUnityProject"
    
    [language_servers.csharp]
    dotnet_version = "6.0"
    path = "/path/to/manually/installed/omnisharp"
    
    [language_servers.csharp.settings]
    unity = true
    solution = "MyUnityProject.sln"
  4. Activate project in Serena
  5. Attempt to use C# symbolic tools (e.g., get_symbols_overview)

Expected Behavior

  • Serena should use the configured OmniSharp and .NET 6.0
  • OR respect the project's target framework (.NET Standard 2.1 / .NET 6.0)
  • C# language server should initialize successfully

Actual Behavior

Error log excerpt:

INFO  solidlsp.language_servers.csharp_language_server:_install_dotnet_with_script:494
      - Installing .NET 10.0 runtime using official Microsoft install script...

ERROR Failed to install .NET 10.0 runtime using install script:
      Command '['bash', '...dotnet-install.sh', '--version', '10.0', ...]'
      died with <Signals.SIGKILL: 9>.

Result:

  • Language server manager fails to initialize
  • All symbolic C# tools (find_symbol, get_symbols_overview, etc.) fail with:
    Error: The language server manager is not initialized
    
  • Multiple bash processes spawn trying to install .NET 10.0 (4-7+ processes)
  • Project becomes unusable for C# code intelligence

Root Cause Analysis

  1. SolidLSP hardcoded .NET 10.0 requirement

    • The solidlsp package has hardcoded logic to install .NET 10.0
    • Code path: solidlsp/language_servers/csharp_language_server.py:_install_dotnet_with_script:494
    • This runs before reading project-specific configuration
  2. .NET 10.0 doesn't exist yet

    • .NET 10 is currently in Preview, no stable release exists
    • Official Microsoft installer fails when attempting --version 10.0
  3. Configuration is ignored

    • Both global ~/.serena/serena_config.yml and project .serena/config.toml are read AFTER installation attempt
    • Settings like dotnet_version = "6.0", path = "...", and external_dotnet_runtime = true have no effect
  4. Unity projects specifically affected

    • Unity 2022+ uses .NET Standard 2.1 (equivalent to .NET 6.0)
    • Unity projects cannot use .NET 10.0 even when it's released
    • This affects a significant portion of C# developers using Serena

What I Tried (All Failed)

Installed prerequisites manually:

  • OmniSharp 1.39.15 for ARM64
  • .NET 6.0 SDK (6.0.102) for ARM64
  • Verified both work independently with DOTNET_ROOT=/usr/local/share/dotnet

Configured project-specific settings (.serena/config.toml):

[language_servers.csharp]
dotnet_version = "6.0"
path = "/Users/username/.local/bin/omnisharp/OmniSharp"
env = { DOTNET_ROOT = "/usr/local/share/dotnet" }

Configured global settings (~/.serena/serena_config.yml):

ls_specific_settings:
  csharp:
    enabled: false  # Tried to disable auto-installation
    path: "/Users/username/.local/bin/omnisharp/OmniSharp"
    dotnet_path: "/usr/local/share/dotnet/dotnet"
    external_dotnet_runtime: true
    dotnet_version: "6.0"

Cleaned up multiple times:

  • Removed ~/.serena/language_servers/static/CSharpLanguageServer/
  • Killed all background installation processes
  • Restarted Claude Code cleanly

Result: SolidLSP still attempts .NET 10.0 installation on every startup

Related Issues

This appears to be the same class of problem as:

The pattern: Serena attempts to install newer .NET versions regardless of project requirements.

Impact

  • All Unity developers cannot use Serena's C# language server
  • All .NET 6.0/8.0 projects may fail if SolidLSP requires .NET 10.0
  • Workaround required: Users must use VS Code + OmniSharp extension separately

Proposed Solutions

Option 1: Support Older .NET Versions (Preferred)

  • Allow SolidLSP to work with .NET 6.0, 8.0, and 9.0
  • Detect project target framework before choosing .NET version
  • Unity projects → use .NET 6.0
  • Modern projects → use .NET 8.0/9.0

Option 2: Respect Manual Configuration

  • When ls_specific_settings.csharp.path is provided, skip auto-installation entirely
  • When external_dotnet_runtime = true, skip .NET installation
  • Read configuration BEFORE attempting any downloads

Option 3: Make .NET Version Configurable

  • Allow dotnet_version in config to override hardcoded version
  • Default to .NET 8.0 (stable) instead of .NET 10.0 (preview)
  • Validate version exists before attempting installation

Option 4: Fallback Strategy

  • Try .NET 10.0 first
  • On failure, fall back to .NET 8.0, then 6.0
  • Use whatever .NET is already installed on the system

Additional Context

Why .NET 6.0 for Unity:

  • Unity 2022+ uses .NET Standard 2.1 API compatibility
  • Unity's C# compiler maps to roughly .NET 6.0 feature set
  • OmniSharp 1.39.x works perfectly with .NET 6.0 for Unity projects

System Details:

$ dotnet --version
6.0.102

$ dotnet --list-runtimes
Microsoft.AspNetCore.App 6.0.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

$ arch
arm64

$ file /usr/local/share/dotnet/dotnet
/usr/local/share/dotnet/dotnet: Mach-O 64-bit executable arm64

Manual OmniSharp Test (Works):

$ DOTNET_ROOT=/usr/local/share/dotnet ~/.local/bin/omnisharp/OmniSharp --version
# Successfully starts, detects .NET 6.0, finds Unity solution

Logs

Serena Log Excerpt
INFO  2026-02-10 11:46:30,842 [Task-1:init_language_server_manager]
      serena.project:create_language_server_manager:414
      - Creating language server manager for /path/to/Unity/Project

INFO  2026-02-10 11:46:31,400 [StartLS:csharp]
      serena.ls_manager:create_language_server:41
      - Creating language server instance for /path/to/Unity/Project, language=csharp.

INFO  2026-02-10 11:46:31,446 [StartLS:csharp]
      solidlsp.language_servers.csharp_language_server:_install_dotnet_with_script:494
      - Installing .NET 10.0 runtime using official Microsoft install script...

ERROR 2026-02-10 11:46:42,177 [StartLS:csharp]
      sensai.util.logging:__exit__:373
      - Language server startup (language=csharp) failed after 10.777 seconds

ERROR 2026-02-10 11:46:42,178 [StartLS:csharp]
      serena.ls_manager:start_language_server:101
      - Error starting language server for language csharp:
        Failed to install .NET 10.0 runtime using install script:
        Command '['bash', '/Users/username/.serena/language_servers/static/CSharpLanguageServer/dotnet-runtime-10.0/dotnet-install.sh',
        '--version', '10.0', '--install-dir', '/Users/username/.serena/language_servers/static/CSharpLanguageServer/dotnet-runtime-10.0',
        '--runtime', 'dotnet', '--no-path']' died with <Signals.SIGKILL: 9>.

Request

Please update SolidLSP or Serena's C# language server integration to:

  1. Support .NET 6.0 and 8.0 (stable versions)
  2. Respect manual OmniSharp configuration when provided
  3. Detect project target framework before choosing .NET version
  4. OR allow disabling automatic .NET installation entirely

This would unblock all Unity developers and users with .NET 6.0/8.0 projects.

Workaround (For Others Experiencing This)

Until fixed, use VS Code with C# extension for IntelliSense, while using Claude Code for AI assistance. OmniSharp in VS Code works perfectly with the same Unity projects.


Thank you for this excellent tool! Looking forward to using Serena with Unity projects once this is resolved.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions