dotnet / dotnet/sdk

Add JSON output format for `dotnet --info` and introduce `dotnet env` for common queries

Open
#49,973 4 comments 4 reactions 0 assignees View on GitHub
Area-CLI untriaged
Dominant language
C#
Stars
3.2k
Forks
1.3k
PR merge metrics
PR metrics pending

Description

**Proposed by Claude (Anthropic)**

## Problem Statement

The current `dotnet --info` output, while comprehensive and human-readable, creates token inefficiencies for AI assistants and programmatic consumption. The mixed formatting, explanatory text, and human-oriented presentation inflate parsing costs and complexity. Additionally, most workflows only need a subset of the diagnostic information, making the full output wasteful for common queries.

## Current Output Issues

- **Mixed formatting**: Inconsistent use of colons, spacing, and structure
- **Explanatory text**: Human-oriented messages like "There are no installed workloads to display" and "Learn more:" URLs
- **Parsing complexity**: AI must use regex/string manipulation instead of structured data access
- **Token overhead**: Verbose presentation wastes tokens on formatting rather than data
- **Information overload**: Common queries require parsing through extensive diagnostic data

## Proposed Solution

**Two-pronged approach following industry patterns:**

### 1. Enhanced `dotnet --info --format json`
Add JSON output to existing command for complete diagnostic information, following patterns from:
- **Docker**: `docker info --format json`
- **Kubernetes**: `kubectl get nodes -o json`
- **Git**: `git log --format=json`
- **AWS CLI**: `aws ec2 describe-instances --output json`
- **Azure CLI**: `az account show --output json`

### 2. New `dotnet env` command for common queries
Introduce a focused command for the 90% use case - essential environment information that AI assistants and scripts typically need.

## Example Outputs

**Current verbose format** (for reference):
```
.NET SDK:
Version: 10.0.100-preview.6.25358.103
Commit: 75972a5ba7
...
Runtime Environment:
OS Name: ubuntu
OS Version: 24.04
...
```

**Enhanced `dotnet --info --format json`** (complete diagnostics):
```json
{
"sdk": {
"version": "10.0.100-preview.6.25358.103",
"commit": "75972a5ba7",
"workloadVersion": "10.0.100-manifests.b6c7f53e",
"msbuildVersion": "17.15.0-preview-25358-103+75972a5ba",
"basePath": "/home/rich/.local/share/dnvm/dn/sdk/10.0.100-preview.6.25358.103/"
},
"runtime": {
"os": "ubuntu",
"osVersion": "24.04",
"platform": "Linux",
"rid": "linux-x64"
},
"host": {
"version": "10.0.0-preview.6.25358.103",
"architecture": "x64",
"commit": "75972a5ba7"
},
"installedSdks": [
{"version": "10.0.100-preview.5.25277.114", "path": "/home/rich/.local/share/dnvm/dn/sdk"},
{"version": "10.0.100-preview.6.25358.103", "path": "/home/rich/.local/share/dnvm/dn/sdk"}
],
"installedRuntimes": [
{"name": "Microsoft.AspNetCore.App", "version": "10.0.0-preview.5.25277.114", "path": "/path"},
{"name": "Microsoft.NETCore.App", "version": "10.0.0-preview.6.25358.103", "path": "/path"}
],
"workloads": {
"installed": [],
"configured": true,
"useWorkloadSets": true
},
"environment": {
"dotnetRoot": "/home/rich/.local/share/dnvm/dn"
},
"globalJson": null
}
```

**New `dotnet env --format json`** (essential info only):
```json
{
"currentSdk": "10.0.100-preview.6.25358.103",
"installedSdks": ["10.0.100-preview.5.25277.114", "10.0.100-preview.6.25358.103"],
"rid": "linux-x64",
"basePath": "/home/rich/.local/share/dnvm/dn/sdk/10.0.100-preview.6.25358.103/",
"globalJson": null
}
```

## Data Frequency Analysis

**High-frequency data (90% of workflows)** - suitable for `dotnet env`:
- Current SDK version (compatibility checks, project targeting)
- Installed SDKs (version switching, requirements validation)
- RID (platform-specific operations)
- Base path (tooling integration)
- Global.json detection (workspace understanding)

**Low-frequency data** - kept in full `dotnet --info`:
- Commit hashes (debugging/support)
- Workload details (specialized scenarios)
- MSBuild version (build troubleshooting)
- Complete runtime listings (deployment scenarios)

## Benefits

**Token Efficiency**:
- `dotnet env`: 80%+ token reduction for common queries
- `dotnet --info --format json`: 60-70% reduction for full diagnostics

**Performance**: Faster execution for common environment queries

**Programmatic Access**: Direct property access (`data.currentSdk`) instead of regex parsing

**Clear Intent**: Separate commands for "check environment" vs "full diagnostics"

**Tooling Integration**: Enables efficient integration with jq, PowerShell ConvertFrom-Json, and programming language JSON parsers

**AI Assistant Optimization**: Precise data extraction without parsing verbose diagnostic output

## Implementation

- Add `--format json` flag to `dotnet --info` (backward compatible)
- Introduce `dotnet env` command with JSON output by default and optional `--format json`
- Follow existing .NET CLI patterns for JSON output
- Consistent property naming (camelCase) and structure
- Include all current information in appropriate commands

This dual approach aligns .NET CLI with industry standards while optimizing for both comprehensive diagnostics and common workflow efficiency.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.