C# 如何从IType获取类型实例(Resharper 8 SDK)

C# 如何从IType获取类型实例(Resharper 8 SDK),c#,resharper-sdk,C#,Resharper Sdk,我正在尝试编写我的第一个ReSharper扩展,但遇到以下问题: 如何从IType描述符中获取已解析的类型 作为背景,我试图编写一个分析器,它使用一个工具来测试两个类型参数的兼容性 到目前为止,我已经知道了 [ElementProblemAnalyzer(new[] { typeof(IInvocationExpression) })] public class MyAnalyzer : IElementProblemAnalyzer` { public void Run(ITreeNod

我正在尝试编写我的第一个ReSharper扩展,但遇到以下问题:

如何从IType描述符中获取已解析的类型

作为背景,我试图编写一个分析器,它使用一个工具来测试两个类型参数的兼容性

到目前为止,我已经知道了

[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
   }
}

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


因此,如果不编译项目并将程序集加载到AppDomain中,则无法将
IType
转换为
System.Type
。但是ReSharper在其自己的类型系统视图中有很多工具来处理类型。你到底想做什么?

我担心情况可能就是这样。我正在尝试为AutoMapper构建一个ReSharper扩展,目的是在它确定您映射的类型不完全“可映射”时提供一个突出显示。为了做到这一点,我需要对实际类型使用对
Mapper.CreateMap()
的调用。如果您能够足够轻松地复制逻辑,您将能够使用ReSharper编写它-有各种实用程序方法可以检查两种类型是否相同(基于源代码)可悲的是,兼容在这里并不微不足道——这不仅仅是常规意义上的可赋值,它是“如果将源类型或其任何子属性展平,目标类型上的所有属性是否都可以从源类型或其任何子属性“水合”。我检查了一下,不幸的是,他们也没有在.Net类型的系统上添加抽象层,所以我不能轻易地伪造它。这可能会带来更多的麻烦。不过我很感激你的建议。