我试图编写我的第一个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
}
}
答案 0 :(得分:0)
你不能做你要求的事情 - ReSharper的类型系统是项目源的视图,而不是加载到AppDomain中的程序集。换句话说,即使Foo.cs尚未加载,您也可以获得Foo.cs中定义的类的IType
。如果项目无法编译,它仍然需要能够返回类型信息,因为Bar.cs中的代码只是简单无效。
因此,您无法在不编译项目并将程序集加载到AppDomain的情况下将IType
转换为System.Type
。但ReSharper有很多工具可以在自己的类型系统视图中使用类型。你究竟想做什么?