Как сгенерировать необходимый IL-код для вызова метода System.Collections.Generic.EqualityComparer<T>.get_Default
с помощью Mono Cecil?
Я пробовал подобные варианты этого, но получил различные ошибки, начиная от того, что PEVerify не может разрешить токен, из-за того, что Сесил жалуется, что что-то из другого модуля и его необходимо импортировать, до исключения ArgumentOutOfRangeException от самого Сесила.
Аргумент универсального типа исходит из PropertyType
свойства, которое я здесь обрабатываю.
PropertyDefinition propertyDef = ...;
var equalityComparer = typeDef.Module.ImportReference(typeof(System.Collections.Generic.EqualityComparer<>));
var equalityComparerInst = equalityComparer.MakeGenericInstanceType(propDef.PropertyType);
var getDefaultMethod = equalityComparerInst.Resolve().Methods.First(m => m.Name == "get_Default");
var getDefaultMethodRef = typeDef.Module.ImportReference(getDefaultMethod, getDefaultMethod);
il.Append(il.Create(OpCodes.Call, getDefaultMethodRef));
Какой код мне для этого нужен?
Общие экземпляры из других модулей всегда сложны.