Getting Null for ITypeSymbol
本文关键字:ITypeSymbol for Null Getting | 更新日期: 2023-09-27 17:49:20
我正在写一些测试,我需要得到一个typesymsymbol。我是这样做的:
private async Task<ITypeSymbol> GetTypeSymbol(string file, TextSpan span)
{
var code = File.ReadAllText(file);
var tree = CSharpSyntaxTree.ParseText(code);
var compilation = CSharpCompilation.Create(
this.GetType().Assembly.GetName().Name,
syntaxTrees: new[] { tree },
references: new[]
{
MetadataReference.CreateFromAssembly(typeof(object).Assembly))
});
var model = compilation.GetSemanticModel(tree);
var root = await tree.GetRootAsync().ConfigureAwait(false);
return model.GetTypeInfo(root.FindNode(span)).Type;
}
由于某种原因,最后一行的Type属性总是空的,即使我从一个看起来像这样的文件传入代码:
public class AClass { }
要清楚,文件被正确读取,它被正确解析,编译被创建,我可以获得模型,并且FindNode()将找到我正在寻找的正确ClassDeclarationSyntax节点。GetTypeInfo()返回一个值,但是Type和ConvertedType都为空。我期望这个应该有一个值。我的预期正确吗?如果是这样,我做错了什么,使Type属性为空?
实际上,似乎GetDeclaredSymbol()(如何在roslyn语义模型中获得模块祖先?)是要走的路。