获取在另一个程序集/项目中声明的类型的类型信息
所以标题说我试图从使用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);
typeInfo
和typeSyntax
都没有我需要的信息,我在这里做错了什么?
这是我正在解析的类:
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
,这是您正在寻找的类型。