Graphify C# 0.1 版本發布 – 為 C# 編碼代理提供編譯器準確的「尋找使用位置」功能

簡要說明 – Graphify C# 的功能與重要性

Graphify C# 是一款免費、無頭的 Roslyn/MSBuild 索引工具,可為任何 C# 解決方案輸出由編譯器解析的符號、呼叫、參考、繼承與覆寫關係的確定性 JSON 圖形。透過提供此語意證據,編碼代理(例如 Claude Code、Codex 或自訂的 LLM 機器人)能以編譯器準確性回答「尋找使用位置」類型的問題,而非依賴不可靠的文字搜尋啟發式方法。


編碼代理的立即價值

  • 精確的重載解析 – 圖形儲存已繫結的簽名,因此代理能區分 Foo(int)Foo(string)
  • 專案感知的關係 – 每個邊都記錄來源專案與目標框架,支援如「僅在測試專案中使用的方法」等查詢。
  • 完整的語言覆蓋 – 支援 C# 14(Roslyn 5.9)與 C# 15 預覽版(透過 .NET 11 SDK),包含泛型、模式比對、非同步與集合表示式。
  • 零執行時依賴 – 無需 IDE、無需編譯後的 DLL,也無需外部資料庫;輸出為單一 JSON 檔案,任何消費者皆可讀取。

工具運作方式

  1. 安裝 – 安裝 .NET 全域工具:
    dotnet tool install --global Graphify.CSharp --framework net10.0
    
  2. 索引 – 對解決方案、專案或 SDK 風格的原始碼資料夾執行 CLI:
    graphify-csharp \
      --input ./src/MyProduct.sln \
      --root . \
      --configuration Release \
      --output ./graphify-out/csharp.json
    
    此命令會產生包含三個頂層陣列的 JSON 文件:nodesedgeshyperedges
  3. 使用 – 代理可直接讀取 JSON,使用 jq 進行查詢,或將其輸入更廣泛的 Graphify 工作流程以進行路徑尋找、群集分析與解釋。
  4. 增量更新 – 加入 --watch 可保持 Roslyn 工作區活躍,並在檔案變更時更新 JSON;--rebuild 強制進行完整重新整理。

語意證據 vs. 純文字搜尋

無 Graphify 使用 Graphify C#
文字比對僅找到名稱字串。 Roslyn 解析每個使用位置的確切宣告。
重載與泛型具有模糊性。 保留已繫結的簽名與專案/TFM 身份。
僅測試使用需手動檢視。 每個呼叫者皆攜帶專案、命名空間與原始碼位置。
類型關係需從文字推論。 inheritsimplementsoverrides 以明確的邊呈現。

範例:方法 DeclarationCatalogBuilder.ForTesting 在圖形中僅有一個來自測試專案的入邊呼叫,讓代理能可靠地判斷為「僅在測試中使用」。


快速整合至 LLM 代理

此儲存庫提供可立即使用的 技能,適用於 Codex 相容代理與 Claude Code。安裝技能僅需一行指令:

mkdir -p .agents/skills/graphify-csharp
curl -fsSL https://raw.githubusercontent.com/zachsaw/graphify-csharp/main/.agents/skills/graphify-csharp/SKILL.md \
  -o .agents/skills/graphify-csharp/SKILL.md

此技能指示代理在回答 C# 相關問題前,先刷新 JSON,並在 traversing callsreferences 邊時使用 symbol_key 識別碼。

若不願使用技能,只需在提示範本中加入以下指示:

針對 C# 結構與使用問題,請在回答前使用 graphify-csharp 刷新 graphify-out/csharp.json。以 symbol_key 識別宣告,並檢視入邊的 callsreferences。零入邊代表觀察到的靜態證據,而非執行時不可達的證明。

有了此上下文,代理可回答如下的問題:

  • 呼叫了建構函式的哪個重載?
  • 哪些類別實作了給定的介面?
  • 哪些成員覆寫了虛擬方法?
  • 哪些宣告沒有觀察到任何入邊參考?

Graphify C# 在生態系中的定位

工具 主要用途 與 Graphify C# 的重疊
Rider / ReSharper 互動式 IDE 導航、重構、檢查。 提供相同的語意邊,但僅限於 IDE UI 內。
NDepend 架構分析、指標、基準、視覺化。 提供類似的呼叫者/依賴資料,但為商業性、重量級套件。
Graphify C# 無頭、語言層級的語意索引,供代理使用。 以開放的 JSON 格式提供原始、編譯器準確的邊;無 UI、無授權限制。

Graphify C# 故意專注:它 試圖取代 NDepend 的報表或 Rider 的 UI,而是彌補自動化代理所需可靠靜態證據的缺失缺口。


性能與可擴展性考量

  • JSON 大小 – 對於數百萬行程式碼的解決方案,輸出可能龐大。使用者曾詢問 SQLite 儲存是否更具可擴展性。目前工具輸出 JSON;下游消費者可依需求匯入資料庫。
  • 執行時開銷 – Roslyn 僅在索引期間載入。--watch 模式保持工作區活躍,但索引仍是按需操作,非持續背景服務。
  • 靜態分析限制 – 圖形僅反映 Roslyn 可靜態檢視的內容。反射、DI 容器、原生互操作與動態呼叫不會以邊呈現。因此,零入邊代表 零觀察到的靜態參考,而非保證執行時無用程式碼。

社群反饋(Hacker News)

bob1029:「我的 VS Copilot 已經會寫一次性 Roslyn 指令碼;Graphify C# 顯示出社群仍未充分運用 Roslyn 來支援 LLM 代理。」

spicyusername:「對即將推出的 C# 15 併集感到興奮;Graphify C# 已支援預覽編譯器。」

JFuzz:「已將技能調整用於 Unity 套件開發;CLI + JSON 工作流程讓語意資料可在 IDE 外取得。」

Merad:「擔心數百萬行程式碼下的 JSON 可擴展性;建議採用 SQLite 後端。" coverband:「詢問輸出格式是否與更廣泛的 Graphify‑Labs 生態系一致。」

quietraster:「想知道索引是在儲存時還是按需進行;工具是按需索引(或透過 --watch)。」

這些評論突顯了對此方法的熱情,以及對可擴展性與整合的實際疑問。


開始使用清單

  1. 安裝適當的執行時間 – 選擇 net10.0 用於 Roslyn 5.9(C# 14)或 net11.0 用於 .NET 11 SDK(C# 15 預覽版)。
  2. 執行索引器 – 將 graphify-csharp 指向你的解決方案;確認產生的 csharp.json 包含 nodesedges
  3. 與你的代理整合 – 加入提供的技能,或將刷新與查詢指示嵌入提示中。
  4. 迭代 – 在開發期間使用 --watch,或在 CI 管道中排程定期刷新。

授權與貢獻

Graphify C# 以 MIT 授權釋出。儲存庫包含建置指令碼(dotnet restoredotnet builddotnet testdotnet pack)與 docs/ 資料夾中的完整文件,涵蓋使用方式、相容性、增量索引與發行程序。

Sources

相關

  • 專案