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属性为空?

Getting Null for ITypeSymbol

实际上,似乎GetDeclaredSymbol()(如何在roslyn语义模型中获得模块祖先?)是要走的路。