IMetaDataImport :: ResolveTypeRef方法的问题

我有自己的.NET应用调试器,它使用IMetaDataImport接口

当我调用ResolveTypeRef方法时,我总是得到NotImplementedException

ResolveTypeRef的定义如下:

 [ComImport] [Guid("....")] //a valid GUID [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [CLSCompliant(false)] public interface IMetaDataImport { void ResolveTypeRef( [ComAliasName("mdTypeRef")] mdToken tr, [ComAliasName("REFIID")] ref Guid riid, [ComAliasName("IUnknown**"), Out, MarshalAs(UnmanagedType.IUnknown)] out object ppIScope, [ComAliasName("mdTypeDef*"), Out] out mdToken ptd ); // ... other methods from IMetaDataImport } 

调用方法:

 metadataImport.ResolveTypeRef(typeRefToken, ref metadataImportGuid, out metadataObject, out typeDefToken) 

通常,该方法应解析类型System.Exception或System.SystemException。

当我将应用程序从.NET 3.5移动到.NET 4时出现问题。

谢谢你的答案!

Uff,我终于摆脱了这个……解决方案不是调用ResolveTypeRef,而是创建自己的方法来解析类型:

  mdToken ptkResScope; uint len; metadataImport.GetTypeRefProps(typeRef, out ptkResScope, null, 0, out len); StringBuilder sb = new StringBuilder((int)len); metadataImport.GetTypeRefProps(typeRef, out ptkResScope, sb, len, out len); string className = sb.ToString(); foreach (loadedModule ) { // this is quite tricky part ... metadataImportForLoadedModule = GetMetaDataImportForModule(loadedModule); metadataImportForLoadedModule.FindTypeDefByName(className, mdToken.Nil, out typeDef); if ( typeDef.IsNonNil(CorTokenType.mdtTypeDef) ) { return typeDef; } } 

这个想法来自http://blogs.msdn.com/b/davbr/archive/2011/10/17/metadata-tokens-run-time-ids-and-type-loading.aspx (如果你是真的很好读对MetaDataImport感兴趣)。