graphify-csharp 是一款免費且無頭的 Roslyn/MSBuild 索引器,能將 C# 原始碼轉換成確定性且可查詢的語意證據:編譯器解析的呼叫者、引用、實作、繼承及覆寫,甚至涵蓋多重載、泛型和多專案。
您可以將它視為 Rider/ReSharper 的語意導航功能切片,專為 Codex、Claude Code 及其他程式碼代理導出。
此工具採用 MIT 授權,無需 IDE、無需編譯專案 DLL、無需資料庫,Graphify 為選用功能。
例如,哪些方法僅被測試使用?
文字搜尋只能找到匹配的拼寫,但無法可靠判斷綁定的是哪個多重載、呼叫者屬於哪個專案,或介面實作是否為目標符號。
graphify-csharp 透過 MSBuild 載入專案,並詢問 Roslyn 每個符號的實際意義。它輸出穩定的識別碼與有向關係,讓代理能檢視而非推斷:
例如,本倉庫包含一個內部方法 DeclarationCatalogBuilder.ForTesting(...)。從擷取的圖形中,代理可以看到一個編譯器解析的呼叫進入。
這是語意證據,而非文字匹配數量。使用者可依專案或命名空間慣例分類呼叫者,並將該方法標記為僅供測試,供人工審查。
結果是一份完整的 JSON 文件,包含節點、邊及超邊。代理可直接讀取,使用 jq 查詢,從自有程式碼消費,或傳給 Graphify。
支援輸入格式包括 .sln、.slnx、.csproj 及基於 SDK 的 .cs 應用。專案的 SDK、套件及 MSBuild 輸入必須在本機可用。
內建的 graphify-csharp 技能教導代理何時刷新索引、如何追蹤語意邊,以及靜態分析的終點。
在相容 Codex 的專案中安裝:
對 Claude Code,請使用 .claude/skills/graphify-csharp/SKILL.md。安裝或更新技能後,請重新載入代理會話。
若不使用技能,請在專案指令中加入:
「對於 C# 結構與用法問題,請先用 graphify-csharp 刷新 graphify-out/csharp.json,再回答。以 symbol_key 識別宣告,檢視呼叫進入與引用邊。將零入邊視為觀察到的靜態證據,而非執行時不可達的證明。」
擷取器提供事實,代理或下游消費者決定這些事實的意義:僅測試使用、零引用、刪除候選或需人工審查。
graphify-csharp 專注於一層語意:
它與 NDepend 在呼叫者、依賴、繼承及死碼調查上有重疊,但產品定位不同:graphify-csharp 不是免費的 NDepend 克隆,也非 IDE 替代品,而是 Roslyn 原生的語意索引,供其他工具與代理構建。
graphify-csharp 是獨立的,不會調用、載入或依賴 Graphify。
未使用 Graphify 時,可用代理、jq、C#、Python 或其他消費者查詢 JSON。例如,列出所有索引方法。
使用 Graphify 時,刷新 C# 證據並利用其高階查詢、路徑、解釋、群集與匯出工作流程。
Graphify 是通用圖形工作流程,graphify-csharp 則提供編譯器綁定重要的 C# 層。
每條邊皆從觀察到關係的宣告指向 Roslyn 解析的宣告,保留原始碼位置與來源。未支援的語意形態會以診斷報告,而非靜默消失或導致擷取失敗。
詳見相容性說明完整語言與編譯器功能矩陣。
對於重複代理工作,可啟動監視器:
監視器保持 Roslyn 工作區熱機,並在背景準備變更專案。一般 graphify-csharp 呼叫作為明確刷新屏障,僅在完整 JSON 快照更新後返回。
若無相符監視器運行,則同一指令執行一次性刷新。使用 --rebuild 可使增量快取失效。
詳見用法與增量索引章節,了解監視器擁有權、過濾、復原與快取行為。
套件包含兩個工具資產:
使用 dotnet tool ... --framework 安裝或更新套件,以選擇工具執行時與 Roslyn 資產。
此參數與可選的 --target-framework 不同,後者用於多目標專案選擇分析編譯。單目標專案無需 --target-framework。
graphify-csharp 報告 Roslyn 靜態可觀察的資訊。反射、依賴注入、原生回呼、動態調用及未載入編譯的程式碼可能產生執行時關係,這些不會以直接邊表示。
工具揭露此界限,而非假裝靜態證據即為執行時可達性證明。
賦予您的 LLM 代理 JetBrains Rider IDE 的強大功能!支援 C# 15 語法!