我有我自己的调试器的.NET应用程序,使用 IMetaDataImport
接口
I have my own debugger for .NET apps that uses IMetaDataImport
interface
当我称之为 ResolveTypeRef
的方法,我总是 NotImplementedException
。
When I call ResolveTypeRef
method, I always get 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
}
该方法调用:
The method calling:
metadataImport.ResolveTypeRef(typeRefToken, ref metadataImportGuid, out metadataObject, out typeDefToken)
通常情况下,该方法应该解决System.Exception类型或System.SystemException。
Typically, the method should resolve type System.Exception or System.SystemException.
问题发生,当我提出从.NET 3.5的应用程序到.NET 4。
The problem occured when I moved app from .NET 3.5 to .NET 4.
谢谢你的答案!
UFF,我终于得到这个去掉?解决的办法不是叫ResolveTypeRef,但创建你自己的方法来解决类型:
Uff, I finally get rid of this ... The solution is not call ResolveTypeRef, but create your own method to resolve type:
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真的好读书)。
The idea comes from http://blogs.msdn.com/b/davbr/archive/2011/10/17/metadata-tokens-run-time-ids-and-type-loading.aspx (really good reading if you are interested in MetaDataImport).