Roslyn,获取泛型类型的符号和声明语法参考
Roslyn, getting the symbol and declaring syntax reference of generic types
在我的 class 中,我有一个 属性 是通用类型。当我“遍历”语法树时,在 VisitPropertyDeclaration
我得到 node.Type is GenericNameSyntax
.
如何获取属性类型对应的符号和语法参考?
我尝试过的:
SemanticModel.GetSymbolInfo(node).Symbol
为空
SemanticModel.GetTypeInfo(node).Type
, SemanticModel.GetTypeInfo(node).Type.OriginalDefinition
return 符号,但 DeclaringSyntaxReferences
属性 为空。
我想这个信息丢失的原因是因为泛型类型在运行时被解析,所以刚刚编译的程序的语义模型没有用这个信息更新?
编辑:我发现了一个编译错误,我已经修复了。但我仍然无法获得 DeclaringSyntaxReferences。这可能是因为此类型是在非项目引用中声明的吗?
Could this maybe be because this type is declared in a non-project reference?
仅当 DeclaringSyntaxReference 是对同一解决方案中另一个源项目的引用时,您才会看到它。如果它来自 DLL 引用,我们将不会拥有它。由于您提到 SemanticModel.GetTypeInfo(node).Type 正在工作,请检查符号的位置 属性 以查看您是否在源或元数据中获取引用。
如果这是一个跨项目参考,但它在源代码中,那么请分享您如何获得编译的代码,因为问题可能就在那里。
在我的 class 中,我有一个 属性 是通用类型。当我“遍历”语法树时,在 VisitPropertyDeclaration
我得到 node.Type is GenericNameSyntax
.
如何获取属性类型对应的符号和语法参考?
我尝试过的:
SemanticModel.GetSymbolInfo(node).Symbol
为空SemanticModel.GetTypeInfo(node).Type
,SemanticModel.GetTypeInfo(node).Type.OriginalDefinition
return 符号,但DeclaringSyntaxReferences
属性 为空。
我想这个信息丢失的原因是因为泛型类型在运行时被解析,所以刚刚编译的程序的语义模型没有用这个信息更新?
编辑:我发现了一个编译错误,我已经修复了。但我仍然无法获得 DeclaringSyntaxReferences。这可能是因为此类型是在非项目引用中声明的吗?
Could this maybe be because this type is declared in a non-project reference?
仅当 DeclaringSyntaxReference 是对同一解决方案中另一个源项目的引用时,您才会看到它。如果它来自 DLL 引用,我们将不会拥有它。由于您提到 SemanticModel.GetTypeInfo(node).Type 正在工作,请检查符号的位置 属性 以查看您是否在源或元数据中获取引用。
如果这是一个跨项目参考,但它在源代码中,那么请分享您如何获得编译的代码,因为问题可能就在那里。