You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅有sln文件路径时如何生成Roslyn AST?

Roslyn AST生成及项目遍历操作指南

1. 前置依赖安装

在你用于处理Roslyn的项目中先安装对应NuGet包:

  • Microsoft.CodeAnalysis.Workspaces.MSBuild:核心工作区操作组件,支持读取解决方案与项目文件
  • Microsoft.Build.Locator:自动定位本机MSBuild环境,无需手动配置路径
  • 按需安装语言包:处理C#项目装Microsoft.CodeAnalysis.CSharp,处理VB项目装Microsoft.CodeAnalysis.VisualBasic

2. 基础环境初始化

首先注册MSBuild实例并加载目标解决方案:

using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.MSBuild;

// 必须放在所有MSBuild相关操作之前执行
MSBuildLocator.RegisterDefaults();

// 加载指定路径的解决方案
using var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(@"C:\test\test.sln");

3. 按单个项目生成AST

你可以选择遍历全部4个项目,也可以单独筛选指定项目处理:

// 示例1:遍历所有项目生成AST
foreach (var project in solution.Projects)
{
    Console.WriteLine($"处理项目:{project.Name}");
    // 遍历项目下所有代码文档
    foreach (var document in project.Documents)
    {
        // 过滤非代码文件,仅处理支持语法树的文档
        if (document.SupportsSyntaxTree)
        {
            // 获取当前代码文件的AST语法树
            var syntaxTree = await document.GetSyntaxTreeAsync();
            // 获取语法树根节点,可直接用于遍历所有语法节点
            var rootNode = await syntaxTree.GetRootAsync();

            // 此处插入你自定义的AST遍历、分析逻辑
        }
    }
}

// 示例2:单独生成指定项目的AST
var targetProject = solution.Projects.FirstOrDefault(p => p.Name == "你需要处理的项目名");
if (targetProject != null)
{
    // 后续逻辑和上面遍历单个项目的逻辑一致
}

4. 其他可遍历的相关产物

除了语法树之外,你还可以生成以下带语义信息的可遍历产物:

  • 语义模型:可以获取类型定义、符号引用关系、变量作用域等语义层面信息,单文档生成方式:
    var semanticModel = await document.GetSemanticModelAsync();
    
  • 项目编译对象:包含整个项目的所有语法树、语义信息、诊断信息,还可以直接导出编译产物:
    var compilation = await project.GetCompilationAsync();
    // 可直接调用compilation.Emit()方法生成dll/exe文件
    
  • 解决方案级关联数据:Roslyn会自动维护4个项目之间的引用关系,你可以直接遍历solution.Projects的所有关联属性,实现跨项目的依赖分析、引用查询等操作。

注意:如果待处理的是.NET Framework框架的项目,你的执行程序也需要用.NET Framework框架编译运行,避免MSBuild版本不兼容导致的加载失败。

内容的提问来源于stack exchange,提问作者Joelty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:04