如何从IType获取Type实例(Resharper 8 SDK)

时间:2015-11-24 12:07:04

标签: c# resharper-sdk

我试图编写我的第一个ReSharper扩展程序而且我遇到了以下问题:

如何从IType描述符中获取已解析的Type?

对于背景,我试图编写一个使用工具测试两种类型参数兼容性的分析器。

到目前为止,我已经得到了这个

[ElementProblemAnalyzer(new[] { typeof(IInvocationExpression) })]
public class MyAnalyzer : IElementProblemAnalyzer`
{
   public void Run(ITreeNode element, ElementProblemAnalyzerData analyzerData, IHighlightingConsumer consumer)
   {
        ...

        var typeArgs = meaningfulChildren.FirstOrDefault(o => o is ITypeArgumentList) as ITypeArgumentList;

        IType psiType = typeArgs.TypeArguments[0];
        Type actualType = psiType.ResolvedType; // No such property
   }
}

1 个答案:

答案 0 :(得分:0)

你不能做你要求的事情 - ReSharper的类型系统是项目源的视图,而不是加载到AppDomain中的程序集。换句话说,即使Foo.cs尚未加载,您也可以获得Foo.cs中定义的类的IType。如果项目无法编译,它仍然需要能够返回类型信息,因为Bar.cs中的代码只是简单无效。

因此,您无法在不编译项目并将程序集加载到AppDomain的情况下将IType转换为System.Type。但ReSharper有很多工具可以在自己的类型系统视图中使用类型。你究竟想做什么?