Implements Prompt 3. Newline-delimited JSON-RPC dispatcher (ping, loadSolution, projectSummary) with pure XML/.sln parsing — no Roslyn or MSBuild NuGet packages (irreconcilable .NET 10 SDK API mismatches). XDocument parses .csproj for frameworks/packages/refs; regex parses .sln project entries; filesystem walk counts .cs/.fs/.vb documents. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.9 KiB
Markdown
63 lines
1.9 KiB
Markdown
# ctx-roslyn-helper
|
|
|
|
C# subprocess invoked by `ctx csharp` commands. Loads .NET solutions with
|
|
Roslyn and answers JSON-RPC queries over stdin/stdout.
|
|
|
|
## Protocol
|
|
|
|
One JSON object per line, UTF-8 without BOM.
|
|
|
|
**Request:** `{"id": 1, "method": "ping", "params": {}}`
|
|
**Success:** `{"id": 1, "result": {...}}`
|
|
**Error:** `{"id": 1, "error": {"code": "E_NOT_FOUND", "message": "..."}}`
|
|
|
|
### Methods
|
|
|
|
| Method | Params | Description |
|
|
|------------------|---------------------------|------------------------------------|
|
|
| `ping` | `{}` | Health check, returns version |
|
|
| `loadSolution` | `{"path": "C:\\...\\x.sln"}` | Load solution into workspace |
|
|
| `projectSummary` | `{}` | Summary of loaded solution |
|
|
| `shutdown` | `{}` | Exit cleanly (no response written) |
|
|
|
|
## Build
|
|
|
|
Requires: .NET 8+ SDK.
|
|
|
|
```sh
|
|
dotnet build src/RoslynHelper -c Release
|
|
```
|
|
|
|
## Publish
|
|
|
|
```sh
|
|
dotnet publish src/RoslynHelper -c Release -r win-x64 --self-contained false -o publish/
|
|
```
|
|
|
|
Output: `publish/ctx-roslyn-helper.exe`
|
|
|
|
## Manual test
|
|
|
|
```sh
|
|
cd publish
|
|
./ctx-roslyn-helper.exe
|
|
```
|
|
|
|
Then type line by line:
|
|
|
|
```
|
|
{"id": 1, "method": "ping", "params": {}}
|
|
{"id": 2, "method": "loadSolution", "params": {"path": "C:\\path\\to\\My.sln"}}
|
|
{"id": 3, "method": "projectSummary", "params": {}}
|
|
{"id": 99, "method": "shutdown", "params": {}}
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Does NOT need to be self-contained. Requires .NET 8+ runtime on the target machine.
|
|
Users of `ctx csharp` are .NET developers — the runtime is already there.
|
|
- MSBuild warnings logged to stderr are informational (missing SDK targets, etc.).
|
|
Only `WorkspaceFailed` events with `Failure` kind indicate real problems.
|
|
- The helper is spawned once per `ctx` invocation and kept alive for all queries
|
|
in that session. ctx Go manages the subprocess lifecycle.
|