Я создал пользовательский IL Rewriter, но для универсального метода retType имеет вид ELEMENT_TYPE_GENERICINST.
Я понятия не имею, чтобы получить typeToken для ELEMENT_TYPE_GENERICINST.Я могу получить ELEMENT_TYPE_MVAR и ELEMENT_TYPE_VAR для этого метода:
mdToken GetVariableTypeToken(CComPtr<IMetaDataImport> pIMetaDataImport, PCCOR_SIGNATURE sig, ULONG sigSize)
{
const ULONG MAX_TOKEN_SIZE = 2048;
HCORENUM phEnum = NULL;
mdTypeSpec rTokens[MAX_TOKEN_SIZE];
ULONG pcTokensNum = 0;
HRESULT hr = pIMetaDataImport->EnumTypeSpecs(&phEnum, rTokens, MAX_TOKEN_SIZE, &pcTokensNum);
if (SUCCEEDED(hr))
{
const ULONG MAX_SIG_SIZE = 20;
byte typeSig[MAX_SIG_SIZE];
PCCOR_SIGNATURE typeSpecSig = typeSig;
ULONG pcbSig = 0;
for (size_t i = 0; i < pcTokensNum; i++)
{
pIMetaDataImport->GetTypeSpecFromToken(rTokens[i], &typeSpecSig, &pcbSig);
if (pcbSig == sigSize)
{
size_t size = min(sigSize, MAX_SIG_SIZE);
size_t j = 0;
for (j = 0; j < size; j++)
{
if (typeSpecSig[j] != sig[j])
break;
}
if (j == size)
{
return rTokens[i];
}
}
}
}
pIMetaDataImport->CloseEnum(phEnum);
return 0;
}