如何使用 Roslyn 从没有项目文件的代码文件生成语义模型



>我有两个文件如下:

namespace a
{
    Class Audi
    {
            public string Model(string a)
            {           
               Benz obj= new Benz();
               var str=obj.BenzDetails();
               return str;
            }
    }
}
namespace a
{
    Class Benz 
    {
            public string BenzDetails()
            {           
              return "some details";
            }
    }
}

我需要获取在奥迪类(全局或本地(中创建的所有对象。我还需要获取使用这些声明的对象调用的方法的详细信息。

例如在这 2 类中,对于奥迪类需要:

  • 创建的对象:- obj
  • 使用此对象调用的方法:- 奔驰详细信息
  • 创建其对象的类的名称:奔驰
  • 该类的命名空间:a

我能够使用以下代码获取类中声明对象的列表:

 var lstLocalObjects = syntaxTree.GetRoot().DescendantNodes().OfType<LocalDeclarationStatementSyntax>()
                                                .Where(x => x.Declaration.Variables.Any(p => p.Initializer.Value.Kind().ToString().Equals("ObjectCreationExpression", StringComparison.OrdinalIgnoreCase)));

我有语法树,我不知道如何生成语义模型。是否可以仅使用语法树获取上述详细信息。请帮忙。谢谢

您需要通过调用CSharpCompilation.Create()来创建Compilation,传递SyntaxTree和必要的引用(至少mscorlib(。

然后,您可以调用GetSemanticModel(SyntaxTree)

相关内容

最新更新