获取在另一个程序集/项目中声明的类型的类型信息

所以标题说我试图从使用Roslyn在另一个程序集中声明的类型中获取类型信息。 最初我试图通过手动查看引用的程序集来实现这一点,但意识到我没有名称空间信息。

我期待以下工作:

var workSpace = Roslyn.Services.Workspace.LoadSolution(solFilePath); IDocument file = null; IProject proje = null; Compilation compilation = Compilation.Create("Test"); List trees = new List(); foreach (var proj in workSpace.CurrentSolution.Projects) { foreach (var doc in proj.Documents) { if (doc.FilePath.ToLower() == filePath.ToLower()) { file = doc; proje = proj; } else trees.Add(doc.GetSyntaxTree()); } } var targetTree = file.GetSyntaxTree(); trees.Add(targetTree); var compilation2 = (Compilation)compilation.AddSyntaxTrees(trees); var semanticModel = compilation2.GetSemanticModel(targetTree); var root = targetTree.GetRoot(); var className = root.DescendantNodes().OfType().ToList().ElementAt(1); var properties = className.DescendantNodes().OfType() .Where(p => p.Modifiers.Select(syn => syn.ToString().ToLower() == "public").Count() > 0).ToList(); var typeInfo = semanticModel.GetTypeInfo(properties.First()); var property = properties.First(); var symbol = semanticModel.GetDeclaredSymbol(property); var symbol2 = semanticModel.GetSymbolInfo(property); 

typeInfotypeSyntax都没有我需要的信息,我在这里做错了什么?

这是我正在解析的类:

  class Foo { public Bar bar { get; set; } public Foo() { } public int GetInt(Bar bar, int ret = 5 ){ return ret; } } 

我正在尝试获取另一个程序集中定义的Bar类的Type信息。

谢谢你的帮助。

不要调用GetTypeInfo 。 相反,一旦你有PropertyDeclarationSyntax ,使用该声明语法调用GetDeclaredSymbol ,你将获得该属性的IPropertySymbol 。 从那里,您可以获取IPropertySymbol.Type ,这是您正在寻找的类型。