Тот же самый ParameterDefinition из Mono.Cecil объявлен как sealed. Это значит, что например Moq не сможет с ним работать. Придется смотреть на
Upd. RhinoMock тоже не сумел.
Сюрпризы на этом не заканчиваются.
Например, Mono.Cecil теряет информацию о generic параметрах метода в FullString. В качестве примера
// three genrics, parameter uses generic type, return type int int ThreeGenericsInt<T, S, Q>(Dictionary<S, Q> dic)превращается в
System.Int32 CoolLibrary.Test::ThreeGenericsInt(System.Collections.Generic.Dictionary`2<S,Q>)
Если убрать generic параметр T,
// two genrics, parameter uses generic type, return type int int ThreeGenericsInt<S, Q>(Dictionary<S, Q> dic)на выходе будет то же самое
System.Int32 CoolLibrary.Test::ThreeGenericsInt(System.Collections.Generic.Dictionary`2<S,Q>)
И удобный способ заполнения Dictionary на основе method.FullName идет лесом. Конечно вопрос решаемый, но подобных мелочей выскакивает слишком уж много.
Например, считать 2 следующих определения изменением одного метода, или удалением первого, и добавлением нового?
int ThreeGenericsInt<T, S, Q>(Dictionary<T, Dictionary<S, Q>> dic)
int ThreeGenericsInt<T, S, Q>(Dictionary<T, Dictionary<S, Q>> dic) where T: IEnumerable
А ведь еще есть атрибуты, изменение котрых тоже стоит отслеживать, поля и свойства и всякое такое прочее.