/** * C# /.NET detection — CONTENT-AWARE .csproj classification. * * A .csproj alone does NOT mean Web API / ASP.NET. Microsoft encodes kind in * Project Sdk, then OutputType / Use* props / PackageReference / FrameworkReference. * Kill line: .csproj alone ≠ type. * * Same composition pattern as go.ts / dart.ts: knowledge in csharp-detection.json, * logic here. Turbo-Cat + scanner both call detectCsharpProject so they agree. */ /** FAF project types we emit (aligned with Go + mobile for MAUI). */ export type CsharpAppType = 'mcp' | 'backend' | 'cli' | 'library' | 'mobile'; export interface CsharpProject { appType: CsharpAppType; /** Assembly / project name from filename, or ''. */ projectName: string; /** TargetFramework(s) raw string if present. */ targetFramework: string; /** Sdk attribute (e.g. Microsoft.NET.Sdk.Web). */ sdk: string; /** Primary framework label (ASP.NET Core / Worker / Cobra-equivalent / …). */ framework: string; /** Human-readable rationale for the .faf `# found:` comment (Glass Hood). */ found: string; } export interface ParsedCsproj { sdk: string; outputType: string; targetFramework: string; isTestProject: boolean; useMaui: boolean; useWpf: boolean; useWindowsForms: boolean; packages: Set; frameworkRefs: Set; } /** Parse the load-bearing fields of an SDK-style .csproj (regex — adequate for detection). */ export declare function parseCsproj(content: string): ParsedCsproj; /** Classify a single parsed csproj. */ export declare function classifyCsproj(parsed: ParsedCsproj, projectFileName: string): Omit & { projectName: string; }; /** List root-level .csproj filenames in a directory. */ export declare function listRootCsprojs(dir: string): string[]; /** * Classify a C# project directory from root-level .csproj file(s). * Multiple projects: pick highest-priority classification (MCP > mobile > backend > cli > library). * Returns null if no .csproj at this directory level. */ export declare function detectCsharpProject(dir: string): CsharpProject | null;