我正在写一些测试,我需要获得一个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?

===============>>#1 票数:3

实际上,似乎GetDeclaredSymbol()( 如何在roslyn语义模型中获取模块祖先? )是要走的路。 这很好用。

  ask by JasonBock translate from so

未解决问题?本站智能推荐:

1回复

从ObjectCreationExpressionSyntax获取ITypeSymbol

我想要达到的目标 我想编写一个代码分析器,它可以使用任何ObjectCreationExpression例如: 并让我找出该类型实现的接口,如果找到特定接口,则执行操作。 我尝试过的 我已经通过注册SyntaxNodeAction来拦截分析: 为了获得接口,IT
1回复

从ITypeSymbol获取TypeSyntax

我正在尝试使用Roslyn-CTP。 目前我正在尝试用具体类型替换var 。 应成为: 找出推断类型很容易。 但由于这部分发生在语义模型中,我得到了一个ITypeSymbol 。 替换发生在语法模型中,所以我需要一个TypeSyntax 。 由于我不想要一个膨胀的名称
2回复

为什么在ITypeSymbol中有静态构造函数的集合而不是一个?

今天和Roslyn一起工作我偶然发现了ITypeSymbol的StaticConstructors属性,它被声明为ImmutableArray<IMethodSymbol>但据我所知,C#和VB中最多只能有一个静态构造函数。 问题是为什么?
1回复

如何为任意类型创建Roslyn ITypeSymbol?

我可以使用SyntaxGenerator生成Int32类型的参数,如此... 我应该使用什么等效代码来创建Dataset类型的参数? 我假设我需要创建一个ITypeSymbol来传递给generator.TypeExpression ,但是怎么做呢?
1回复

从具有ITypeSymbol的所有封闭名称空间收集使用

我正在使用Microsoft.CodeAnalysis编写类生成器,该类生成器将现有类(即ITypeSymbol实例)作为输入,并应生成一个包含ClassDeclarationSyntax的新NamespaceDeclarationSyntax 。 本质上,生成的类是源类的外观。 就是说,在
1回复

可靠地将类型符号(ITypeSymbol)与Roslyn进行比较

我想在以下情况下可靠地比较ITypeSymbol的两个实例是最容易和最直接的方式(我在一个更大的项目中遇到了这些问题,并试图尽可能地简化它): 我有这个SyntaxTree的CSharpCompilation: 我们使用CSharpSyntaxRewriter遍历树,更改类并更新C
2回复

如何将Microsoft.CodeAnalysis.ITypeSymbol与System.Type进行比较

我使用以下命令从SyntaxNode成功收到了ITypeSymbol: 现在我想知道这个ITypeSymbol对应于我的执行代码中存在的System.Type实例,如typeof(IEnumerable<int>)或someObject.GetType() 。 我试过了
2回复

如何比较Roslyn中不同项目的类型符号(ITypeSymbol)?

我在解决方案中有2个测试项目。 第一个项目(“VDoc”)声明VDocQuery类型。 第二个项目(“VDocQueryTest”)调用VDocQuery构造函数。 我得到2个VDocQuery的ITypeSymbol(每个项目一个),比​​较它,但得到错误的结果。 脚步:
1回复

如何在Roslyn上获得扩展方法?

我需要列出文件中找到的所有扩展方法。 这是我到目前为止所做的(看起来它正在工作): 即使我无法测试所有情况,但看起来这样做有效。 但我想知道是否有更简洁的方法来解决这个问题。 是否有某种IsExtension或一些SyntaxKind.ExtensionMethod? 我
1回复

我可以为我的扩展程序获得Roslyn分析器,但无法获得用于同一诊断的codeFix提供程序

我创建了一个vsix项目,该项目引用了Roslyn分析器和代码修复库。 我可以为我的扩展程序获得分析器,但无法为相同的诊断程序获取代码修复提供程序。 分析仪 CodeFix提供程序 这是上面提到的AsyncMethodNameAnalyzer的代码修复。 看起来Expor