packages/omo-codex/plugin/skills/lsp-setup/references/csharp/README.md
csharp — csharp-ls.csdotnet tool install -g csharp-lsRequires the .NET SDK. Install the tool globally:
dotnet tool install -g csharp-lsdotnet tool install -g csharp-lsdotnet tool install -g csharp-lsGlobal .NET tools land in ~/.dotnet/tools — ensure that directory is on PATH (Windows: %USERPROFILE%\.dotnet\tools).
Confirm it resolves:
command -v csharp-ls
Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in .codex/lsp-client.json (Codex) AND .opencode/lsp.json (OpenCode/omo):
{ "lsp": { "csharp": { "priority": 100 } } }
For builtin ids in a PROJECT config, command is supplied automatically — only set priority/initialization/extensions/disabled/env. A fully custom (non-builtin) server with its own command must go in the USER config (~/.codex/lsp-client.json).
None commonly required. csharp-ls picks up the nearest .sln or .csproj; keep the solution restorable (dotnet restore).
Razor and Blazor files use a separate builtin server:
razor — roslyn-language-server --stdio.razor .cshtmldotnet tool install -g roslyn-language-server --prerelease (requires v5.8.0+; see dotnet/razor)dotnet tool install -g roslyn-language-server --prerelease
command -v roslyn-language-server
Enable it in a project/user config:
{ "lsp": { "razor": { } } }
csharp-ls / roslyn-language-server.csharp-ls / roslyn-language-server on PATH (~/.dotnet/tools); reopen shell after install.dotnet restore; an unrestored solution yields empty results.roslyn-language-server builds lack the --stdio Razor support — install with --prerelease.bun ../../scripts/verify-lsp.ts path/to/File.cs