Инъекция IL в строго названную сборку? - PullRequest
2 голосов
/ 23 января 2011

У меня проблема с библиотекой, чья сборка строго типизирована и для которой у меня нет исходного кода. Благодаря Reflector я нашел источник ошибки, но, к сожалению, класс запечатан, что не дает мне просто создать подкласс. Поскольку это относится к множеству внутренних методов, простое копирование / вставка всего исходного кода также завершается неудачей.

В качестве последнего средства я подумал, что мог бы добавить какой-то IL в сборку (это относительно простая вещь, просто нужно добавить || something.GetType() == typeof(System.DBNull) в оператор if, но я предполагаю, что сильное именование будет проблемой?

Есть ли выход из этого или я во власти продавца?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Если вы совершаете обход сборки с помощью ildasm / ilasm и самостоятельно исправляете il - сильное имя не выживет в обходе (поскольку у вас нет ключа, чтобы оставить его в покое). если он должен быть в gac, то вы можете создать свой собственный ключ и переназначить его новым.

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

1 голос
/ 15 февраля 2011

Вам нужно, чтобы сборка продолжала иметь строгое имя?

Если да, то должно ли оно иметь такое же строгое имя, как и раньше?

Вы всегда можете сгенерироватьсобственную пару ключей и заново подпишите сборку своим ключом, а не ключом поставщика.Это все еще позволит вам вставить измененную сборку в gac.

Однако следует помнить, что ваша лицензия на библиотеку может не позволять вам распространять измененные копии.

Если вам нужно отправить библиотеку, то вы, вероятно, во власти продавца.

...