18.08.2016, 11:14 | #1 |
Участник
|
Общие (сторонние) библиотеки в плагинах
Коллеги, поделитесь опытом, кто как использует общие или сторонние библиотеки в плагинах.
Например, у меня есть библиотека, используемая во всех плагинах. Раньше я сливал ее с помощью ILMerge с плагином и плагин как обычно заливался регистратором. Все отлично работало. Потом понадобилось журналирование, заюзал log4net, который в слитом виде работал некорректно. Пришлось вынести log4net в GAC, а заодно туда же и общую библиотеку. Но чего то работой с GACом я "наелся", потому что разработка и отладка плагина, когда требуется внести правки в общую библиотеку, превращается в незапланированный бардак с постоянными iisreset-ами и перезаливками в GAC. C ILMerge в этом плане не было вообще никаких проблем. Кто как решает подобные задачи? |
|
18.08.2016, 13:47 | #2 |
Чайный пьяница
|
Только IlMerge, только хардкор.
Парктически все проекты, с которыми работаю - облако, так что GAC и файловая система - недоступны. Можете поделиться - в чём проблема с log4net и мёржем? Я буквально на той неделе работал с FileHelpers библиотекой - проблем не выявлено.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.08.2016, 14:13 | #3 |
Участник
|
Проблема с log4net какая то странная... Он не может создать логгер, пишущий в базу данных. Какие то проблемы к классом ADO.NET, каким точно не помню. Файл настроек для log4net лежит в CRM как XML-веб-ресурс, вот yf этапе его загрузки в логгер все и падает. Тот же самый код в сервисах работает.
|
|
18.08.2016, 14:30 | #4 |
Чайный пьяница
|
Если честно - зачем вам такие сложности? Не проще ли вынести такого рода функционал в сторонний сервис и просто его вызывать?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
18.08.2016, 15:25 | #5 |
Участник
|
Цитата:
Логирование? Но тогда его надежность сильно ниже, наверное будет, когда логгер где то там, далеко в стороннем сервисе. Общая бизнес-логика? Это точно прямое воздействие на производительность. Одно дело что-то сделать прямо в плагине и совсем другое дернуть сторонний сервис, подождать ответа... Конечно, с точки зрения простоты реализации это гораздо удобнее. |
|
18.08.2016, 15:31 | #6 |
Чайный пьяница
|
По поводу надёжности - соглашусь.
Тут срабатывает всё тот же закон - теряете в мощности, приобретаете в скорости. Теряете в простоте деплоя - поднимаете в надёжности.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.11.2018, 14:52 | #7 |
Участник
|
Внезапно обнаружилось...
При сливании с помощью ILMerge плагина и log4net не удается сконфигурировать AdoNetAppender с помощью XML-файла - получаю ошибку Цитата:
Could not create Appender [AdoNetAppender] of type [log4net.Appender.AdoNetAppender]. Reported error follows. CreateConverterInstance cannot create instance, converterType is null
Parameter name: converterType Appender named [AdoNetAppender] not found. Однако, если создать тот же самый AdoNetAppender программно - то все работает. Как вариант можно вручную парсить XML, хотя, конечно, это дико муторно. |
|
12.11.2018, 09:10 | #8 |
Moderator
|
Что-то поздно я увидел ваш пост. По поводу мержевания, однозначно рекомендую ILRepack, так как с ILMerge я знатно наелся говна.
Что касается логирования, то тут два вопроса/замечания:
p.s. В конечном итоге, логи все равно никто не читает. Вы, с большей вероятностью будете искать возможность повторить ошибку в среде разработки, чтобы спокойно ее отладить.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
13.11.2018, 13:01 | #9 |
Участник
|
TraceService плох тем, что он не пишет ничего пока не произошла ошибка (по крайней мере в случае с плагинами это так), а мне нужна отладочная информация без генерации исключения.
В моем случае, лог нужен не для того, чтобы он просто был или для мониторинга доступности системы/функционала, а для отладки и тестирования. Так что его прием и хранение - это моя проблема |
|
13.11.2018, 13:15 | #10 |
Moderator
|
Цитата:
Тоже довольно странная практика... Почему для отладки и тестирования нельзя использовать Unit тесты? Тот же Fake Xrm Easy позволяет вам даже запросы к базе протестировать. На худой конец есть Плагин Профайлер... Ну или CRMSnoop, который соберет за вас трассировку
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
13.11.2018, 15:11 | #11 |
Участник
|
Цитата:
Трассировка плагинов, которая должна писаться в Plug-in Trace Log у меня лично туда не пишется. Системная настройка, говорящая о записи всего-всего - стоит, а записей нет. Возможно это работает в Online-версии CRM, но у меня на OnPremise - не работает. Цитата:
|
|
14.11.2018, 10:50 | #12 |
Moderator
|
Понял вас, резон есть. Добавлю только, что мы подобное тоже практикуем и производительность в жопе. Возможно, конечно, все дело в реализации, но дисковые операции существенно тормозят пайплайн.
В плагинах еще можно извернуться и держать статичный логгер в теле класса, но как быть с WFA? Активности создаются и разрушаются, всякий раз при инстанцировании процесса, поэтому каждая операция должна быть записана здесь и сейчас... Как вариант, я предложил бы вам сделать кастомную логирующую активность и звать из кода именно ее. В этом случае, думаю, получится сделать эффективную асинхронную выгрузку в файл, с минимальным влиянием на пайплайн. Из дополнительных плюсов:
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
Похожие темы | ||||
Тема | Ответов | |||
2011: атрибуты энтити target в плагинах | 4 | |||
Вопрос по возвращению данных с помощью библиотеки Xrm.ServiceToolkit | 14 | |||
Общие контакты. | 7 |
|