aspire ls dedupes settings vs walk using case-sensitive comparison on macOS
- Dominant language
- C#
- Stars
- 6.3k
- Forks
- 991
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 196
Description
## Background
PR #17631 (L5 from #17626) added symlink-aware dedupe between the apphost path declared in `aspire.config.json` / `.aspire/settings.json` and the path produced by the recursive workspace walk in `aspire ls`. The dedupe currently uses `OperatingSystem.IsWindows() ? OrdinalIgnoreCase : Ordinal` (same comparison code as before the PR; #17626 only added symlink canonicalization on top).
## Bug
macOS APFS is case-insensitive by default. If the user authored the settings path with different casing than the actual on-disk filename, e.g.
```json
{ "appHost": { "path": "$WS/APPHOST.csproj" } }
```
…while the discovery walk surfaces `$WS/AppHost.csproj`, `aspire ls` shows two rows for the same file:
```
│ /private/var/.../AppHost.csproj │ csharp │ possibly-unbuildable │
│ /var/.../APPHOST.csproj │ csharp │ possibly-unbuildable │
```
Both paths refer to the same inode on the file system, so they should dedupe.
## Repro
```bash
WS=$(mktemp -d)
echo '' > "$WS/AppHost.csproj"
cat > "$WS/aspire.config.json" <
Contributor guide
Assessment
This issue has not been assessed yet.