Информация об изменениях

Сообщение Re[2]: Удобный способ внесения изменений в чужую C#-библиоте от 25.04.2016 19:57

Изменено 25.04.2016 20:10 Albeoris

Здравствуйте, Sinix, Вы писали:

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

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

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

Попробую воспроизвести TypeForwarding и посмотреть — что меняется в этом случае в старой DLL.
Возможно, я смогу воспроизвести это посредством Mono.Cecil. В противном случае придётся руками проходить по всем возможным местам обитания ссылки на старый тип и менять их на новый.
Re[2]: Удобный способ внесения изменений в чужую C#-библиоте
Здравствуйте, 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
}