# Maguyva 对 C# 的支持：让 .NET 代码库的重构更安全

Canonical source: https://maguyva.ai/zh-hans/languages/csharp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 通过 AST 解析和符号提取支持 C#，让 AI 智能体能够在 .NET 服务、大量使用 LINQ 的业务逻辑、共享库以及存续多年的企业级仓库之间自如穿梭。

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .cs, .csx
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

- 混合了 Web 接口、后台任务和共享库的 ASP.NET、Worker Service 及内部平台代码仓库。
- 维护成熟 .NET 体系的团队，其中 LINQ、异步流程和框架抽象掩盖了真正的执行路径。
- 在重写业务逻辑之前，想测试智能体能否在分层的 .NET 代码中保持有据可依的团队。

## 智能体工作流

- 在修改业务逻辑之前，先追踪控制器、服务与仓储之间的调用路径。
- 查看某个模型、DTO 或共享工具类在代码仓库中的实例化位置。
- 在让智能体改写任何代码之前，先理解周边的 LINQ 或异步模式。

## 在成熟的 .NET 代码库中，什么才是关键

很多使用 AI 工具的团队身处 .NET 世界，而非从零开始的 JavaScript 项目。他们有 API、后台工作进程、共享模型、内部库，以及经年累积的业务逻辑。问题不在于 LLM 能否写出 C# 语法，而在于它能否在一个改错一处就可能牵连服务、模型和共享抽象的代码仓库中，保持有据可依。

这正是为什么一个 C# 页面必须比“支持”二字说得更具体。

## Maguyva 在 C# 中实际提取了什么

Maguyva 会规范化 `using` 导入，从定义中剥离可空类型和数组后缀（如 `?` 和 `[]`），并将构造函数式的调用节点识别为实例化，同时剥离泛型尖括号。这些细节在类密集的 C# 代码库中很有用，能让图谱在真实领域类型周围更加清晰。

该配置还过滤掉了大量 BCL 和 LINQ 噪声。这一点比听起来更重要——在成熟的 .NET 代码库中，一张被框架调用主导的图谱用处不大。真正有用的图谱，是那种能让特定于代码仓库的控制器、服务、DTO 和辅助类依然清晰可辨的图谱。

## 面向 .NET 代码库的实用 MCP 工作流

实际的工作流通常从以下几步开始：

- 当你已知控制器、服务、DTO 或模型的名称时，用 `find_symbol`。
- 在修改可能被广泛引用的共享服务或类型之前，用 `dependency_search`。
- 当路径横跨多个层级、需要处理诸如“追踪这个请求从控制器到仓储的完整路径”这类提问时，用 `get_task_context`。

## 这个页面何时有用

这个页面适合那些希望在真实 .NET 代码库中获得 AI 辅助、而非玩具项目的团队。如果周边系统更偏向 JVM 而非 .NET，可以对比 [Java](/zh-hans/languages/java)。如果你的 C# 层只是更大规模多语言系统中的一部分，相邻的 [TypeScript](/zh-hans/languages/typescript) 页面通常也值得一看。

## 引擎细节

- 导入语句中的 `using` 前缀会被归一化，符号定义中的可空标记或数组后缀（如 `?` 和 `[]`）会被剥离。
- 实例化通过调用节点识别，并剥离泛型括号，有助于让构造函数式的用法在图谱中保持可读。
- 该配置会显式过滤大量 BCL 和 LINQ 噪声，使代码仓库特有的服务和模型更容易显现出来。

## 常用 MCP 入口工具

- `find_symbol`: 当你已知即将改动的控制器、服务、DTO 或共享类型名称时使用。
- `dependency_search`: 在编辑应用内各处使用的核心服务或模型前，使用入向遍历。
- `get_task_context`: 适合在分层的 .NET 代码库中处理诸如“追踪这个请求从控制器到仓储层的路径”这类提示。
