【问题标题】:Roslyn, getting the symbol and declaring syntax reference of generic typesRoslyn,获取泛型类型的符号并声明语法参考
【发布时间】:2021-09-19 17:01:56
【问题描述】:

在我的班级中,我有一个通用类型的属性。当我“遍历”语法树时,在VisitPropertyDeclaration 中我得到node.Type is GenericNameSyntax

如何获取属性类型对应的符号和语法引用?

我尝试过的:

  • SemanticModel.GetSymbolInfo(node).Symbol 为空
  • SemanticModel.GetTypeInfo(node).TypeSemanticModel.GetTypeInfo(node).Type.OriginalDefinition 返回符号,但 DeclaringSyntaxReferences 属性为空。

我猜这个信息丢失的原因是因为泛型类型在运行时被解析,所以刚刚编译的程序的 SemanticModel 没有用这个信息更新?

编辑:我发现了一个编译错误,它我已经修好了。但我仍然无法获得 DeclaringSyntaxReferences。这可能是因为此类型是在非项目引用中声明的吗?

【问题讨论】:

    标签: .net roslyn


    【解决方案1】:

    这可能是因为此类型是在非项目引用中声明的?

    只有当它是对同一解决方案中另一个源项目的引用时,您才会看到 DeclaringSyntaxReference。如果它来自 DLL 引用,我们将不会拥有它。由于您提到 SemanticModel.GetTypeInfo(node).Type 工作正常,请检查符号的 Locations 属性以查看您是否在源或元数据中获取引用。

    如果这是一个跨项目参考,但它是源代码,那么请分享您如何获得编译的代码,因为问题可能就在那里。

    【讨论】:

    • 它没有源。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多