Présentation
Graphify C# est un outil gratuit, sans interface graphique, qui exploite Roslyn et MSBuild pour transformer l’ensemble d’un projet C# en un graphe sémantique exploitable. Le processus génère un fichier csharp.json contenant des nœuds, des arêtes et des hyper‑arêtes décrivant les appels, références, implémentations, héritages et surcharges résolus par le compilateur. Le format JSON est stable, lisible par n’importe quel consommateur (agents Codex, Claude Code, scripts jq, bibliothèques C# ou Python) et ne nécessite aucune DLL pré‑compilée ni base de données externe.
Fonctionnement technique
Lors de l’exécution, Graphify C# charge la solution via MSBuild et crée un workspace Roslyn. Chaque symbole est interrogé auprès du compilateur, ce qui garantit que les identités sont overload‑aware et project/TFM‑aware. Les relations observées sont émises sous forme d’identifiants déterministes (par ex. Graphify.CSharp.Roslyn.DeclarationCatalogBuilder.ForTesting(...)) et enrichies de métadonnées de provenance (fichier, ligne, projet). Le résultat est un graphe complet où chaque arête pointe du déclarant vers le déclarant résolu par le compilateur.
dotnet tool install --global Graphify.CSharp --framework net10.0 \
--input ./src/MyProduct.sln \
--root . \
--configuration Release \
--output ./graphify-out/csharp.json
Le graphe peut être interrogé directement avec jq :
jq '.nodes[] | select(.properties.node_kind == "method")' \
graphify-out/csharp.json
Cette approche évite les ambiguïtés des recherches textuelles, qui ne distinguent pas les surcharges, les génériques ou les projets d’appel.
Analyse des bénéfices et limites
Le principal avantage réside dans la précision du binding : chaque appel est résolu comme le ferait le compilateur, ce qui permet à un agent de répondre à des requêtes telles que « quelles méthodes sont appelées uniquement par les tests ? » ou « qui implémente cette interface ? ». En outre, le format ouvert facilite l’intégration dans des pipelines d’automatisation ou des outils de visualisation.
Les limites sont toutefois explicites. Graphify C# ne réalise qu’une analyse statique ; les arêtes nulles n’indiquent pas une inaccessibilité à l’exécution, mais simplement l’absence d’observation dans le code source. De plus, l’outil requiert que toutes les dépendances du projet (SDK, packages NuGet, fichiers MSBuild) soient disponibles localement, ce qui peut compliquer son usage dans des environnements CI isolés. Enfin, aucune métrique de qualité (complexité cyclomatique, couverture de tests) n’est fournie, la fonction restant strictement centrée sur la navigation sémantique.
Intégration et usage
Graphify C# s’installe comme un outil .NET global et peut être lancé en mode « watch » pour garder le workspace Roslyn chaud et mettre à jour le graphe à chaque modification du code :
graphify-csharp \
--input ./src/MyProduct.sln \
--watch
Les projets d’agents peuvent charger le JSON, le rafraîchir avant chaque session et exploiter les clés symbol_key pour identifier les déclarations. Des compétences pré‑packagées (ex. .agents/skills/graphify-csharp/SKILL.md) permettent d’ajouter rapidement la capacité de rafraîchissement et de navigation sémantique à des modèles de langage compatibles Codex ou Claude Code. Ainsi, Graphify C# constitue une couche d’infrastructure fiable pour tout système d’assistance au codage qui nécessite une compréhension exacte du code C# au niveau du compilateur.