xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Резолюшен

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

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

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

  • c# 5.0: async/await

    in brief: * methods marked as async always return Task . * one can use the await operator inside bodies of these methods. * the await XXX operator…

  • c# 4.0: dynamic

    dynamic x = 2; var y = x * 2; how it works, part I: * C# compiler emits two entities to reify this construct: a callsite, and a binder. * The…

  • Указатели в сишарпе

    Иногда даже в managed коде может возникнуть противоестественное желание прокастить объект к void* и шотатам поковырять. Вроде бы сишарп поддерживает…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments