xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Categories:

Кошмар продолжается

Не успел я поборот баг, описанный в соседнем посте, как наткнулся на связанный. Как было описано в том посте, проблема в том, что рефлекшн-эмит записывает сигнатуры, в которых участвуют многомерные массивы вот так (иллюстрация для двумерных массивов): T[..., ...], что отличается от того как это делает csc - T[0...,0...]. Оказывается, для рантайма эта небольшая разница оказывается очень значительной.

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

P.S. Год назад этот баг уже засабмиттили в Майкрософт: http://support.microsoft.com/kb/960240. Вот что пишут по этому поводу из Редмонда: "Microsoft has recognized this problem, and it is currently planned that a future release of the .NET Framework will include a System.Reflection.Emit namespace that will have corrected this. Avoid using multidimensional arrays in classes where this anomaly might be a problem for you."
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
  • 4 comments