SemanticModel.GetSymbolInfo(typeSyntax)返回null

时间:2017-07-09 13:10:07

标签: c# roslyn roslyn-code-analysis

我在解决Roslyn中的某些类型时遇到问题。 大多数时候它按预期工作 但在某些情况下,在某些文件中,某些类型无法解决。 这是我用来处理类型的代码:

private string GetTypeName(TypeSyntax type)
{
    var si = _model.GetSymbolInfo(type);
    var s = si.Symbol;
    if (s == null)
    {
        var ti = _model.GetTypeInfo(type);
        if (ti.Type?.Kind == SymbolKind.ErrorType)
        {
            return "**error type**";
        }

        return "**unknown type**";
    }
    return GetTypeNameFromSymbol(s as ITypeSymbol);
}

我从各种不同的表达式和声明中传递一个TypeSyntax。 它似乎是每个文档和每种类型的失败。 在某些文档中,它无法将Task解析为类型,在某些文档中无法解析不同的异常类型。

我无法创建一个重现这个的小例子。 我在C#to Kotlin转换器中使用上面的代码: https://github.com/rogeralsing/ProjectExodus

在某些情况下,我最终会使用" 错误类型"科。 在" 未知类型"

只有在尝试从目前为止看到的一些相当大的解决方案中发生故障时才会发生故障。

这会导致什么? 我从文档中得到了我的语义模型:

var model = await d.GetSemanticModelAsync();
var root = await d.GetSyntaxRootAsync();

我还有别的事吗?

编辑: 我设法提取了这些信息: 它说包含组件丢失了。 这是为什么?源解决方案在VS.NET中打开并构建良好

enter image description here

1 个答案:

答案 0 :(得分:1)

检查是否有相同的类文件另存为“ class1.old”,并且是否正在将其加载到prj / solution工作区中。在这种情况下,它将产生歧义!