我正在编写一些测试,我需要获取一个ITypeSymbol。这里是我的做法:
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都为null。我有点期望它实际上应该有一个值。如果是这样的话,我的期望是正确的吗?如果是,那么我错在了什么地方,导致Type属性为空?