
這次我們來(lái)看一個(gè)很有意思的開源工具Slnmap。它是一個(gè)基于 Roslyn 的代碼圖 MCP Server專門面向 .NET 代碼庫(kù)。簡(jiǎn)單說(shuō)它能把 .sln 解決方案、項(xiàng)目引用、類型定義、方法調(diào)用關(guān)系這些信息整理成結(jié)構(gòu)化的代碼圖再通過(guò) MCP 協(xié)議暴露給 AI 編程工具使用。如果你平時(shí)用 Claude Desktop、Claude Code、Cursor 這類工具分析 .NET 項(xiàng)目經(jīng)常會(huì)遇到一個(gè)問(wèn)題AI 對(duì)代碼庫(kù)的結(jié)構(gòu)理解很淺容易憑空猜測(cè)類名、方法名、命名空間給出的建議看著像那么回事一編譯全是錯(cuò)。Slnmap 想解決的正是這個(gè)信息斷層問(wèn)題。它最核心的價(jià)值有幾個(gè)第一用 Roslyn 做語(yǔ)義級(jí)解析而不是正則匹配拿到的符號(hào)信息是編譯平臺(tái)級(jí)別的第二通過(guò) MCP 標(biāo)準(zhǔn)協(xié)議接入 AI 工具不需要改 LLM 的 prompt直接給模型“看代碼圖”的能力第三面向 .NET 生態(tài)對(duì)解決方案、項(xiàng)目依賴、跨項(xiàng)目調(diào)用有原生理解。下面我一篇講清楚這個(gè)項(xiàng)目適合誰(shuí)、怎么部署、怎么接到 Claude/Cursor 里、怎么驗(yàn)證效果以及最容易踩的坑。1. 核心能力速覽能力項(xiàng)說(shuō)明項(xiàng)目類型基于 Roslyn 的 .NET 代碼圖 MCP Server核心功能解析 .sln/.csproj生成符號(hào)級(jí)代碼圖通過(guò) MCP 暴露給 AI 工具技術(shù)基礎(chǔ)Roslyn 編譯平臺(tái)、Model Context Protocol適用語(yǔ)言C# / .NET 代碼庫(kù)硬件要求無(wú)特殊 GPU 需求普通開發(fā)機(jī)即可運(yùn)行支持平臺(tái)Windows / Linux / macOS 均可取決于 .NET SDK 支持范圍啟動(dòng)方式命令行啟動(dòng)作為 MCP Server 進(jìn)程運(yùn)行MCP 傳輸方式常見(jiàn)為 stdio 或 HTTP/SSE具體以項(xiàng)目文檔為準(zhǔn)是否支持 API支持通過(guò) MCP 協(xié)議工具暴露是否支持批量任務(wù)支持對(duì)多項(xiàng)目/多解決方案的批量索引分析適合場(chǎng)景AI 編程輔助、代碼庫(kù)結(jié)構(gòu)分析、跨項(xiàng)目依賴梳理、自動(dòng)生成文檔這里我明確一點(diǎn)這篇是圍繞 Slnmap 的項(xiàng)目定位和 MCP 接入方式展開的實(shí)用指南部分運(yùn)行參數(shù)需要以你拉到的源碼版本和 README 為準(zhǔn)我會(huì)在每一步標(biāo)注哪些是通用做法、哪些要按實(shí)際項(xiàng)目調(diào)整。2. 適用場(chǎng)景與使用邊界Slnmap 適合誰(shuí)最直接的是 .NET 開發(fā)者尤其是維護(hù)中大型解決方案的人。一個(gè)解決方案動(dòng)輒幾十個(gè)項(xiàng)目跨項(xiàng)目調(diào)用鏈有時(shí)連老手都要翻半天AI 工具如果沒(méi)有結(jié)構(gòu)化信息基本就是在“瞎猜”。用上 Slnmap 之后AI 可以查詢真實(shí)的類型定義、方法簽名、引用關(guān)系回答會(huì)扎實(shí)很多。具體能解決的場(chǎng)景包括讓 AI 解讀一個(gè)陌生 .NET 解決方案的整體架構(gòu)包括項(xiàng)目劃分和依賴方向。讓 AI 定位某個(gè)類、接口、方法的定義位置以及誰(shuí)調(diào)用了它。讓 AI 分析跨項(xiàng)目依賴找出循環(huán)引用或者不合理的架構(gòu)分層。讓 AI 根據(jù)現(xiàn)有代碼模式生成符合項(xiàng)目風(fēng)格的新代碼。讓 AI 輸出架構(gòu)說(shuō)明、模塊說(shuō)明、接口清單等文檔內(nèi)容。不適合什么Slnmap 不是代碼搜索引擎也不做運(yùn)行時(shí)行為分析。它拿到的信息是編譯期的符號(hào)和引用不是程序跑起來(lái)之后的行為鏈路。如果你要分析性能瓶頸、內(nèi)存分配、并發(fā)問(wèn)題那應(yīng)該用 profiler而不是代碼圖。另外它面向 .NET 生態(tài)對(duì) JavaScript、Python、C 這類代碼庫(kù)沒(méi)有意義。使用邊界要特別強(qiáng)調(diào)如果代碼庫(kù)包含公司核心業(yè)務(wù)邏輯、未公開的算法、客戶敏感數(shù)據(jù)在接入任意 MCP Server 時(shí)都要注意數(shù)據(jù)流向。Slnmap 本身是在本地解析代碼但 AI 客戶端會(huì)把查詢結(jié)果發(fā)送給 LLM 服務(wù)這意味著代碼層面的結(jié)構(gòu)化信息可能會(huì)離開本機(jī)。企業(yè)環(huán)境里要么用本地模型要么提前做代碼脫敏和權(quán)限審批不要直接把整個(gè)解決方案丟給外部 AI 服務(wù)。版權(quán)層面Roslyn 是 .NET 官方開源編譯器平臺(tái)Slnmap 作為分析工具使用 Roslyn 是常規(guī)做法但你在用 AI 生成代碼時(shí)要留意公司對(duì)生成代碼的版權(quán)策略這是工程合規(guī)問(wèn)題不是工具本身能替你決定的。3. 環(huán)境準(zhǔn)備與前置條件Slnmap 是 .NET 系的工具所以環(huán)境準(zhǔn)備以 .NET 開發(fā)環(huán)境為主。下面是通用檢查清單按順序過(guò)一遍基本不會(huì)卡住。3.1 安裝 .NET SDKSlnmap 本身是一個(gè) .NET 程序需要對(duì)應(yīng)版本的 .NET SDK 來(lái)構(gòu)建和運(yùn)行。到 dotnet.microsoft.com 下載 SDK 即可建議安裝 LTS 版本。安裝完成后在終端驗(yàn)證dotnet --version如果能輸出版本號(hào)說(shuō)明 SDK 就緒。3.2 獲取項(xiàng)目源碼從 GitHub 拉取 Slnmap 倉(cāng)庫(kù)或者直接下載 Release 包。如果是源碼構(gòu)建需要拉取后執(zhí)行g(shù)it clone Slnmap 倉(cāng)庫(kù)地址 cd Slnmap dotnet restore我沒(méi)有拿到確切的倉(cāng)庫(kù)地址替換成你實(shí)際看到的 GitHub 地址即可。拉代碼之后先看 README確認(rèn)它要求的最低 .NET 版本和構(gòu)建命令。3.3 準(zhǔn)備目標(biāo)代碼庫(kù)Slnmap 分析的是 .NET 解決方案所以你得有一個(gè)待分析的倉(cāng)庫(kù)里面至少包含一個(gè) .sln 文件或者 .csproj 文件。如果是只包含獨(dú)立 .cs 文件的文件夾Roslyn 也能解析但項(xiàng)目級(jí)依賴關(guān)系會(huì)缺失效果會(huì)打折扣。這里有一個(gè)工程建議目標(biāo)倉(cāng)庫(kù)盡量保持可編譯狀態(tài)。Roslyn 的語(yǔ)義模型強(qiáng)依賴編譯上下文如果代碼本身有大量編譯錯(cuò)誤符號(hào)信息的準(zhǔn)確度會(huì)下降。Slnmap 能容忍一定程度的錯(cuò)誤但不要指望它在一個(gè)“編譯不過(guò)”的倉(cāng)庫(kù)里給出完美結(jié)果。3.4 準(zhǔn)備一個(gè)支持 MCP 的 AI 客戶端這部分可選但推薦。Slnmap 的價(jià)值是通過(guò) MCP 協(xié)議體現(xiàn)的當(dāng)前主流支持 MCP 的工具有 Claude Desktop、Claude Code、Cursor、Windsurf 等。先用一個(gè)客戶端跑通再擴(kuò)展到日常開發(fā)流程。4. 安裝部署與啟動(dòng)方式Slnmap 的啟動(dòng)方式和傳統(tǒng) Web 服務(wù)不同它不是一個(gè)帶界面的網(wǎng)站而是一個(gè) MCP Server 進(jìn)程由 AI 客戶端拉起并通信。通用步驟是先構(gòu)建/下載 Slnmap再把它注冊(cè)到 MCP 客戶端的配置文件里。4.1 構(gòu)建運(yùn)行dotnet build -c Release dotnet run --project Slnmap 項(xiàng)目路徑 -- --solution /path/to/your.sln這是通用模板。實(shí)際 Slnmap 是否通過(guò)--solution參數(shù)指定目標(biāo)要按項(xiàng)目 README 調(diào)整。如果它設(shè)計(jì)成啟動(dòng)時(shí)指定工作目錄或配置文件那就改成對(duì)應(yīng)的參數(shù)格式。4.2 注冊(cè)到 Claude DesktopClaude Desktop 的 MCP 配置在claude_desktop_config.json不同系統(tǒng)的路徑不同通常位于用戶配置目錄。注冊(cè)一個(gè) MCP Server 的配置大致如下{ mcpServers: { slnmap: { command: dotnet, args: [ run, --project, /absolute/path/to/Slnmap, --, --solution, /absolute/path/to/your.sln ] } } }注意路徑必須是絕對(duì)路徑。配置好后重啟 Claude Desktop在 MCP 面板里應(yīng)該能看到 slnmap 以及它暴露的工具列表。如果看不到先看 Claude Desktop 的日志再確認(rèn)命令行本身是否能手動(dòng)跑通。4.3 注冊(cè)到 CursorCursor 的 MCP 配置在設(shè)置里的 MCP 面板支持添加 JSON 配置格式和 Claude Desktop 類似。不同客戶端的字段名可能略有差異但整體思路一致告訴客戶端如何拉起 Slnmap 進(jìn)程。如果 Cursor 的版本支持command和args字段配置方式基本一樣。4.4 傳輸方式說(shuō)明MCP Server 常見(jiàn)的傳輸方式是 stdio 和 HTTP/SSE 兩類。stdio 模式由客戶端直接啟動(dòng)子進(jìn)程配置簡(jiǎn)單推薦本地使用HTTP/SSE 模式適合遠(yuǎn)程服務(wù)或多人共用但需要處理端口、鑒權(quán)和網(wǎng)絡(luò)策略復(fù)雜度高一些。Slnmap 支持哪種以項(xiàng)目文檔為準(zhǔn)。材料里沒(méi)有明確說(shuō)明我不會(huì)替你猜成“同時(shí)支持”穩(wěn)妥的做法是拉源碼后看 README 或啟動(dòng)參數(shù)幫助。5. 功能測(cè)試與效果驗(yàn)證把 Slnmap 接入客戶端之后重點(diǎn)就是驗(yàn)證它到底有沒(méi)有給 AI 提供有效信息。建議按下面的順序測(cè)試從簡(jiǎn)單到復(fù)雜逐步確認(rèn)。5.1 測(cè)試解決方案結(jié)構(gòu)查詢?cè)?AI 客戶端里輸入類似這樣的指令請(qǐng)查看當(dāng)前加載的 .NET 解決方案結(jié)構(gòu)列出包含哪些項(xiàng)目以及項(xiàng)目之間的引用關(guān)系。如果 Slnmap 正常生效AI 應(yīng)該能列出項(xiàng)目清單并說(shuō)明引用方向而不是回答“我無(wú)法直接讀取你的代碼庫(kù)”。判斷成功的標(biāo)準(zhǔn)輸出的項(xiàng)目名稱與真實(shí) .sln 內(nèi)容一致。引用關(guān)系描述與 csproj 里的 ProjectReference 一致。沒(méi)有編造不存在的項(xiàng)目或依賴。如果 AI 仍然說(shuō)“我無(wú)法查看”優(yōu)先檢查 MCP Server 是否成功注冊(cè)、工具是否加載、目標(biāo)路徑是否正確。5.2 測(cè)試符號(hào)定位輸入指令在代碼庫(kù)中找到 IUserRepository 接口的定義位置并說(shuō)明它有哪些實(shí)現(xiàn)類。這個(gè)測(cè)試能驗(yàn)證 Roslyn 語(yǔ)義解析是否工作。AI 應(yīng)該能返回文件的相對(duì)路徑、接口定義以及實(shí)現(xiàn)了該接口的類列表。這里要注意如果代碼庫(kù)里存在同名接口或類AI 能否借助 Slnmap 的信息區(qū)分不同命名空間下的同名類型是衡量代碼圖質(zhì)量的關(guān)鍵點(diǎn)。5.3 測(cè)試方法調(diào)用關(guān)系輸入指令查找 OrderService.CalculateTotal 方法被哪些地方調(diào)用。調(diào)用關(guān)系的準(zhǔn)確性取決于 Roslyn 語(yǔ)義模型能否正確解析符號(hào)而不是靠全文搜索猜出來(lái)的。如果 Slnmap 提供了查詢調(diào)用方的工具AI 應(yīng)該給出真實(shí)的調(diào)用點(diǎn)而不是“我覺(jué)得這里可能調(diào)用了”。5.4 測(cè)試跨項(xiàng)目依賴分析對(duì)一個(gè)多項(xiàng)目解決方案輸入指令分析 Core 項(xiàng)目是否被 Controller 項(xiàng)目引用畫出依賴鏈路。這一步能驗(yàn)證 Slnmap 是否真正理解了 .sln 和 .csproj 的引用關(guān)系。如果配置正確AI 能準(zhǔn)確描述跨項(xiàng)目依賴方向甚至發(fā)現(xiàn)隱藏的間接依賴。5.5 失敗時(shí)的排查思路現(xiàn)象可能原因排查重點(diǎn)工具列表為空MCP Server 啟動(dòng)失敗在終端手動(dòng)運(yùn)行 Slnmap觀察是否有報(bào)錯(cuò)AI 說(shuō)無(wú)法讀取代碼庫(kù)工具沒(méi)有正確暴露或參數(shù)不對(duì)檢查 MCP 配置路徑和工具簽名返回的符號(hào)信息不完整目標(biāo)代碼庫(kù)存在大量編譯錯(cuò)誤先確保解決方案能正常編譯回答中混雜猜測(cè)信息AI 沒(méi)有采用 Slnmap 返回的數(shù)據(jù)調(diào)整提示詞要求嚴(yán)格基于工具返回內(nèi)容回答6. 接口 API 與批量任務(wù)MCP Server 本身的“接口”就是它暴露的一組工具AI 客戶端通過(guò) MCP 協(xié)議調(diào)用這些工具底層一般是 JSON-RPC 消息。Slnmap 具體暴露哪些工具要等接入后看工具列表。6.1 工具調(diào)用通用流程在 MCP 架構(gòu)下一次查詢大致是AI 決定調(diào)用工具 → 發(fā)送工具名和參數(shù) → Slnmap 解析本地代碼 → 返回結(jié)構(gòu)化結(jié)果 → AI 基于結(jié)果生成回答。這一層對(duì)使用者是透明的你不需要手動(dòng)寫 JSON-RPC 消息客戶端都幫你處理了。6.2 驗(yàn)證 MCP 服務(wù)是否可調(diào)用如果你想脫離 AI 客戶端直接用命令行驗(yàn)證 Slnmap 是否有響應(yīng)可以看它啟動(dòng)后是否輸出了 MCP 握手信息或者有沒(méi)有類似的--list-tools參數(shù)。不同實(shí)現(xiàn)方式不一樣建議在終端先跑起來(lái)觀察 stdout 輸出判斷它是在等 stdio 輸入還是起了 HTTP 端口等待請(qǐng)求。6.3 批量分析思路Slnmap 這種代碼圖工具很適合批量任務(wù)比如一個(gè) CI 管道里并行分析多個(gè)解決方案。常見(jiàn)套路是寫一個(gè)腳本遍歷倉(cāng)庫(kù)目錄下的所有 .sln 文件逐個(gè)調(diào)用 Slnmap 生成結(jié)構(gòu)信息輸出成 JSON 或 Markdown。比如find . -name *.sln -maxdepth 3 | while read sln; do dotnet run --project /path/to/Slnmap -- --solution $sln --output ${sln%.sln}.json done注意這是通用示例--output參數(shù)是否存在要以實(shí)際項(xiàng)目為準(zhǔn)。批量任務(wù)最重要的不是跑完而是控制失敗策略單個(gè)解決方案解析失敗不應(yīng)該中斷整個(gè)任務(wù)建議每個(gè)任務(wù)單獨(dú)捕獲錯(cuò)誤最后匯總?cè)罩尽?.4 調(diào)用結(jié)果寫入文件如果 Slnmap 支持輸出到文件批量生成的代碼圖可以沉淀為項(xiàng)目的架構(gòu)文檔或者作為后續(xù) AI 提問(wèn)的離線索引。這是一個(gè)很實(shí)用的工程化方向相當(dāng)于給項(xiàng)目做了一次結(jié)構(gòu)快照??煺瘴募ㄗh納入版本管理方便回溯架構(gòu)變化。7. 資源占用與性能觀察Slnmap 不是重計(jì)算型工具沒(méi)有 GPU 和顯存需求但這不代表可以無(wú)視資源占用。Roslyn 解析大型解決方案會(huì)吃內(nèi)存和 CPU尤其是第一次建立完整語(yǔ)義模型的時(shí)候。觀察資源占用最常見(jiàn)的做法是Linux/macOS 下用top或htop看 CPU 和內(nèi)存。Windows 下用任務(wù)管理器。如果是批量任務(wù)記錄每個(gè)解決方案的解析耗時(shí)和峰值內(nèi)存。影響性能的關(guān)鍵因素解決方案里的項(xiàng)目數(shù)量項(xiàng)目越多引用圖越復(fù)雜。源碼文件數(shù)量和代碼行數(shù)直接影響語(yǔ)法樹和語(yǔ)義模型的構(gòu)建時(shí)間。是否開啟了完整語(yǔ)義分析如果只需要結(jié)構(gòu)信息部分工具可以只做語(yǔ)法級(jí)解析省下很多時(shí)間。首次解析和增量解析的差異首次要把整個(gè)解決方案讀進(jìn)來(lái)后續(xù)如果 Slnmap 支持緩存速度會(huì)明顯提升。如果遇到內(nèi)存占用過(guò)高可以嘗試縮小分析范圍比如只分析某個(gè)子項(xiàng)目而不是整個(gè)解決方案。這不一定能直接配置但可以切到子項(xiàng)目的 .csproj 或更小范圍的文件夾。大型代碼庫(kù)最容易遇到的問(wèn)題不是慢而是 MCP 請(qǐng)求超時(shí)。AI 客戶端調(diào)用外部工具通常有超時(shí)時(shí)間如果 Slnmap 解析一個(gè)巨型解決方案超過(guò)幾十秒客戶端可能直接判定調(diào)用失敗。遇到這種情況優(yōu)先考慮給 Slnmap 增加緩存或預(yù)索引機(jī)制或者把解決方案拆成更小粒度進(jìn)行分析。8. 常見(jiàn)問(wèn)題與排查方法我把實(shí)際使用中最常見(jiàn)的幾類問(wèn)題整理成一張排查表遇到問(wèn)題先對(duì)著表過(guò)一遍。問(wèn)題現(xiàn)象可能原因排查方式解決方案啟動(dòng)時(shí)提示找不到 .NET 運(yùn)行時(shí).NET SDK 未安裝或版本不匹配運(yùn)行dotnet --version安裝對(duì)應(yīng)版本的 .NET SDKdotnet restore失敗NuGet 源不可達(dá)或網(wǎng)絡(luò)問(wèn)題查看 restore 日志檢查 NuGet 源配置必要時(shí)切換鏡像源MCP 工具列表為空Slnmap 進(jìn)程啟動(dòng)后立即崩潰在終端手動(dòng)運(yùn)行觀察錯(cuò)誤輸出修復(fù)啟動(dòng)參數(shù)或路徑問(wèn)題AI 客戶端提示 MCP 連接失敗配置文件路徑不對(duì)或 JSON 格式錯(cuò)誤檢查配置文件語(yǔ)法使用絕對(duì)路徑修正 JSON查詢結(jié)果與代碼不一致目標(biāo)倉(cāng)庫(kù)不是最新代碼或存在編譯錯(cuò)誤先執(zhí)行dotnet build編譯通過(guò)后再查詢大型解決方案解析過(guò)慢項(xiàng)目多、文件多沒(méi)有索引緩存觀察 CPU 和內(nèi)存占用拆分范圍或等待緩存建立端口沖突如果用 HTTP 模式端口已被其他服務(wù)占用查看端口占用修改 Slnmap 監(jiān)聽端口AI 仍然在編造符號(hào)工具返回了數(shù)據(jù)但模型沒(méi)采用查看 MCP 調(diào)用日志在提示詞中要求嚴(yán)格基于工具結(jié)果這里要特別強(qiáng)調(diào)如果 AI 輸出的內(nèi)容還是看起來(lái)“合理但錯(cuò)誤”不要只怪模型先確認(rèn) Slnmap 真的返回了正確數(shù)據(jù)。MCP 日志里能看到工具調(diào)用的輸入和輸出這是判斷問(wèn)題歸屬的關(guān)鍵證據(jù)。9. 最佳實(shí)踐與使用建議跑通 Slnmap 只是開始真正把它用出價(jià)值建議做好下面幾件事。9.1 給 AI 設(shè)計(jì)明確的分析路徑不要一上來(lái)就讓 AI “分析一下這個(gè)項(xiàng)目”那會(huì)導(dǎo)致它大量調(diào)用工具、消耗 token還可能抓到一堆無(wú)關(guān)信息。更好的方式是分步驟提問(wèn)先查解決方案結(jié)構(gòu)再聚焦某個(gè)項(xiàng)目然后深入到具體類和方法。提示詞可以寫成先調(diào)用解決方案結(jié)構(gòu)查詢工具列出項(xiàng)目清單。然后只針對(duì) Core 項(xiàng)目分析其中 Service 層類的職責(zé)和依賴。最后輸出 DependencyGraph 的調(diào)用關(guān)系摘要。這樣 AI 的工具調(diào)用路徑清晰返回質(zhì)量也更高。9.2 把代碼圖輸出沉淀為文檔讓 AI 基于 Slnmap 的查詢結(jié)果生成架構(gòu)說(shuō)明、模塊清單、接口文檔整理后存到倉(cāng)庫(kù)里。這些文檔可以作為新人上手材料也可以作為后續(xù) AI 交互的上下文。代碼圖快照建議按版本保存架構(gòu)變化時(shí)能直觀看出依賴變更。9.3 注意隱私與代碼合規(guī)使用 Slnmap 云 LLM 時(shí)代碼結(jié)構(gòu)信息會(huì)被發(fā)送到模型服務(wù)端。企業(yè)項(xiàng)目務(wù)必評(píng)估數(shù)據(jù)出境風(fēng)險(xiǎn)。能接受的情況下用私有化部署的 LLM 網(wǎng)關(guān)不能接受就把 Slnmap 的適用范圍限制在非敏感模塊或者只用于本地實(shí)驗(yàn)。9.4 控制工具調(diào)用頻次MCP 工具調(diào)用本質(zhì)上是在消耗客戶端的 token 配額。如果一個(gè)問(wèn)題反復(fù)觸發(fā)多次符號(hào)查詢成本會(huì)快速上漲。建議在提示詞里讓 AI 合并查詢請(qǐng)求或者一次查詢返回盡量完整的結(jié)構(gòu)化數(shù)據(jù)減少來(lái)回調(diào)用。9.5 為批量任務(wù)做容錯(cuò)如果要在 CI 里批量分析多個(gè)解決方案腳本層面要加超時(shí)控制、錯(cuò)誤捕獲、日志輸出。單個(gè)解決方案失敗就中斷整個(gè)流水線會(huì)非常影響開發(fā)效率。給每個(gè)任務(wù)設(shè)置獨(dú)立超時(shí)時(shí)間超時(shí)后標(biāo)記失敗并繼續(xù)下一個(gè)。10. 總結(jié)與下一步Slnmap 是那種“思路很對(duì)”的工具在 AI 編程時(shí)代代碼庫(kù)的結(jié)構(gòu)信息不應(yīng)該靠模型瞎猜而應(yīng)該由編譯器級(jí)別的工具精確提供。Roslyn 本身已經(jīng)是 .NET 生態(tài)最可靠的語(yǔ)義分析基礎(chǔ)MCP 則是當(dāng)前連接 AI 與外部能力的標(biāo)準(zhǔn)協(xié)議Slnmap 把兩者接到一起方向是清晰的。第一次上手建議先用一個(gè)小型解決方案做驗(yàn)證確認(rèn)它能準(zhǔn)確列出項(xiàng)目結(jié)構(gòu)、找到類型定義、畫出調(diào)用關(guān)系。然后接一個(gè)真實(shí)的中型倉(cāng)庫(kù)測(cè)試跨項(xiàng)目依賴分析效果。最容易踩的坑集中在兩點(diǎn)一是 MCP 配置路徑不對(duì)導(dǎo)致工具加載失敗二是目標(biāo)代碼庫(kù)編譯錯(cuò)誤太多導(dǎo)致符號(hào)信息不完整。這兩個(gè)問(wèn)題先解決后面基本順暢。如果后續(xù)項(xiàng)目持續(xù)維護(hù)可以考慮的方向包括更細(xì)粒度的符號(hào)索引、增量分析緩存、對(duì) Roslyn Workspace 的深度利用以及和現(xiàn)有 CI 管線的集成。這套能力完全有潛力做成 .NET 團(tuán)隊(duì)的“架構(gòu)雷達(dá)”讓 AI 真正基于代碼事實(shí)來(lái)回答問(wèn)題。建議收藏備用下次需要一個(gè) AI 助手理解 .NET 代碼庫(kù)時(shí)直接按這篇文章跑一遍。