xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Резолюшен

После некоторого обдумывания того, что делать с багом, описанным в предыдущем посте, решил вот что. На пока единственный практичный вариант - подсунуть тайп-билдеру пачку прокси вместо набора его метод-билдеров.

Проблема кроется в методе класса SignatureHelper, но все энтри поинты к нему идут через статические методы, т.е. тут никак не подкопаться. А видели бы вы сколько использований у этого SignatureHelper... К сожалению, из этого следует, что если похожий баг возникнет в другом месте - с филдами, пропертями или еще хз где, то придется делать новые фиксы.

Было бы очень круто, если бы можно было в рантайме создать клон рефлекшн-эмита и подменить бажный кусок кода на правильный, после чего дальше юзать пофикшенный клон. Я вижу здесь две потенциальные проблемы: 1) видимость внутренних методов, 2) методы, объявленные как [MethodImpl(MethodImplOptions.InternalCall)], но обе из них разрешимы. Для доступа к непубличным мемберам можно юзать LCG, который при наличии фулл-траста может скипать проверки видимости, а вместо клонирования интернальных методов можно сгенерить их обертки.
Tags: dotnet
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments