Re[2]: Удобный способ внесения изменений в чужую C#-библиоте
От: Albeoris  
Дата: 25.04.16 19:57
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Навскидку — или type forwarding, или post-build weaving, например, ч/з fody.

К сожалению, оба сценария не совсем подходят.
Оба предполагают, что у меня исходники изменяемой DLL я могу её перекомпилировать.
У меня же есть исходники лишь DLL на которую происходит перенаправление.
Вот как бы средствами Mono.Cecil воткнуть type forwarding в чужую DLL.

Хочется переписать тип в своей сборке (на нормальном C#), сохранив сигнатуры оригинальных методов.
Проблема в том, что TypeReference фигурирует во множестве мест: аргументы методов, возвращаемые значения, отражение (отдельная песня >_>), определение generic'ов. И очень хочется оставить его в старой сборке в виде заглушки: перенаправить сюда.

Попробую воспроизвести TypeForwarding и посмотреть — что меняется в этом случае в старой DLL.
Возможно, я смогу воспроизвести это посредством Mono.Cecil. В противном случае придётся руками проходить по всем возможным местам обитания ссылки на старый тип и менять их на новый.

---
Ага, нашёл отличную статью от Нестерука:
https://nesteruk.wordpress.com/2011/04/06/on-type-forwarding/

В исходной сборке появляется директива:
.class extern forwarder SomeNamespace.C
{
  .assembly extern SecondAssembly
}
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
Отредактировано 25.04.2016 20:10 Albeoris . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.