Я пишу несколько тестов, и мне нужно получить 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 в последней строке всегда имеет значение null, даже если я передаю код из файла, который выглядит так:
public class AClass { }
Чтобы было ясно, файл читается нормально, он правильно анализируется, компиляция создана, я могу получить модель, и FindNode() найдет правильный узел ClassDeclarationSyntax, который я ищу. GetTypeInfo() возвращает значение, но и Type, и ConvertedType имеют значение null. Я как бы ожидал, что это действительно должно иметь значение. Правильно ли мое ожидание? Если да, то что я делаю неправильно, так что свойство Type имеет значение null?