11.11.2008, 08:50 | #1 |
Участник
|
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 |
|