Показать сообщение отдельно
Старый 11.11.2008, 08:50   #1  
Alexandr Zhuravlev is offline
Alexandr Zhuravlev
Участник
 
16 / 10 (1) +
Регистрация: 10.11.2008
Адрес: Питер
? CRM4, плагины и сборки.
Доброе время суток.

Занимаюсь CRM недавно, в основном пишу плагины. Когда сборка с плагинами самодостаточна все более или менее понятно. Но рано или поздно возникает необходимость вынести какие-то базовые вещи в отдельную сборку (назовем ее базовой), на которую уже добавляется референс из других сборок с плагинами.
И тут возникает неприятный момент - поскольку, как я сказал, занимаюсь CRM недавно, базовая сборка также постоянно меняется и дополняется. Соответственно, при обновлении плагина на сервере, базовую сборку также нужно переписывать на сервер и перегистрировать ее в GAC. Но неприятность не в этом, а в том, что каждый раз нужно reset'ить IIS, иначе dll-ку с базовой сборкой не заменить.
Я попробовал отказатьяс от GAC и грузить сборку в плагине через AssemblyResolve по фиксированному пути, но это, естественно, не помогло - dll-ка также блокируется.
Потом я попробовал грузить файл в byte[] и оттуда уже грузить сборку. Теперь dll-ка не блокируется - ее даже можно удалить и все работает до перезапуска IIS, но в этом-то и проблема. Сервер не грузит новую версию поскольку у него уже в памяти есть старая и единственный выход - опять рестартить IIS. Смысл извращений теряется.

Я в курсе что выгрузить отдельную dll вроде как нельзя - нужно выгружать весь AppDomen, в который она загружена. Но при обновлении плагина через тот же Plugin Registration Tool как то это происходит (возможно там и выгружается AppDomen - но почему тогда при этом не выгружается базовая сборка, которая по идее должна быть в том же домене что и сборка с плагинами?)

В общем просьба поделиться опытом - может кто-то справился с подобным.

PS. Знаю про ILMerge - но пользоваться ей не хочу. В сборке с плагинами создавать новый AppDomen и туда динамически грузить базовую тоже не хочу, поскольку это чревато неоправданным усложнением - хочется просто добавить референс и наследоваться скажем от базовых классов.

PPS. Плохо что в C# нет чего-то типа статически линкуемой библиотеки. Или я просто не знаю как это сделать?
__________________
"Hello World!" 17 errors, 31 warnings