private static string GetFullTypeName(MetadataReader metadataReader, Handle handle) { if (handle.IsNil) { return null; } if (handle.HandleType == HandleType.Type) { var type = metadataReader.GetTypeDefinition((TypeHandle)handle); string name = metadataReader.GetString(type.Name); while (IsNested(type.Attributes)) { var enclosingType = metadataReader.GetTypeDefinition(type.GetDeclaringType()); name = metadataReader.GetString(enclosingType.Name) + "+" + name; type = enclosingType; } if (type.Namespace.IsNil) { return name; } return metadataReader.GetString(type.Namespace) + "." + name; } if (handle.HandleType == HandleType.TypeReference) { var typeRef = metadataReader.GetTypeReference((TypeReferenceHandle)handle); string name = metadataReader.GetString(typeRef.Name); if (typeRef.Namespace.IsNil) { return name; } return metadataReader.GetString(typeRef.Namespace) + "." + name; } return string.Format("<unexpected token kind: {0}>", AsToken(metadataReader.GetToken(handle))); }