![]() |
#1 |
Участник
|
![]()
Доброго дня, продолжаю наводить шороху в данной ветке, собственно имеется вопрос.
![]() В один из плагинов внедряем механизм записи логов с помощью NLog, добавил в ссылки нужную библиотеку, указал using все как обычно (например) в консольных приложениях, сама библиотека после билда скопировалась в папку с решением. Однако, при выполнении плагина по событию, возникает ошибка: Цитата:
Не удалось загрузить файл или сборку "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c" либо одну из их зависимостей. Не удается найти указанный файл.
Так вот спрашиваю, куда ему (плагину) этот dll положить, что бы плагин его увидел? ![]() П.С. пробовал также класть NLog.dll вместе с плагином в: C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly, результат тот же. |
|
![]() |
#2 |
Участник
|
Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/ |
|
|
За это сообщение автора поблагодарили: a33ik (1), ximik33rus (1). |
![]() |
#3 |
Участник
|
Цитата:
Сообщение от Skel
![]() Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/ ![]() Сегодня нашел решение конкретно с логгером - это создание веб-сервиса с библиотекой NLog, который будет принимать от плагина данные, подлежащие логированию и писать куда нужно. ![]() Кстати аналогично можно было бы поступить и с другими внешними библиотеками (если очень нужно), создать веб сервис с набором библиотек и методов, которые будут обрабатывать полученные от плагинов данные и возвращать тот или иной результат. ![]() |
|
![]() |
#4 |
Участник
|
Распространенная практика - замерживать вспомогательные библиотеки в библиотеку с плагинами с помощью ILMerge.
Если с этим не хочется связываться, то NLog можно разместить в GAC'е или (что хуже, но тоже работает) в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
__________________
Опыт позволяет ошибаться гораздо увереннее. |
|
|
За это сообщение автора поблагодарили: ximik33rus (1). |
![]() |
#5 |
Участник
|
Цитата:
в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
|
|
![]() |
#6 |
Чайный пьяница
|
Цитата:
По моему опыту - пользуйтесь ILMerge. Это в Onprem можно по-разному постараться подсунуть эту сборку. Если работаете с онлайн - у вас вариантов немного.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#7 |
Участник
|
Не взлетело потому-что по видимому Вы зарегистрировали сборкув DB
Сделайте регистрацию на диске скопируйте сюда C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly (на всех серверах вашего развертывания) все ваши сборки и будем Вам счастье
__________________
Читайте SDK!!! |
|
![]() |
#8 |
Участник
|
Полностью согласен! Пробовал все перечисленные варианты - сливание сборок в итоге обходиться "дешевле" в разработке, а главное - в поддержке.
|
|
![]() |
#9 |
Участник
|
Билд был Debug, да.
Цитата:
Спасибо за ответы! Последний раз редактировалось ximik33rus; 28.05.2018 в 09:23. |
|
![]() |
#10 |
Чайный пьяница
|
На самом деле ilmerge - зло, но зло допустимое в данной ситуации.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#11 |
Moderator
|
Или попробуйте мой вариант: http://www.axforum.info/forums/blog.php?b=8256. Те же яйца, только в профиль, но работает быстрее ILMerge
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() ![]() |
|
|
За это сообщение автора поблагодарили: Skel (1). |
![]() |
#12 |
Участник
|
ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).
Про использование ILMerge с плагинами можно почитать тут. |
|
![]() |
#13 |
Участник
|
Попробовал я ILMerge, через обращение консолью с параметрами к утилите от MS через cmd и так: http://www.pzone.ru/mscrm/crmdev/plu...ustom-ilmerge/, зависает при сборке создавая смерженный файл в 0 байт.
Пробовал через NuGet-плагин, и тоже грабли ![]() Пробовал еще таким вот методом смержить: http://www.pzone.ru/mscrm/crmdev/plu...l-custom-merge, он кстати смержил, но некоторые библиотеки не имеют строгого имени, а свои библиотеки я подписывал snk-файлом, но CRM отчаянно ругается на отсутствие строгого имени у библиотеки и вызывает впри выполнении плагина эксепшн ![]() Не везет мне с этим ILMerge )) |
|
![]() |
#14 |
Участник
|
Создайте батник с кодом ниже:
Код: Rename MainLib.dll MainLib2.dll "c:\Program Files (x86)\Microsoft\ILMerge\ilmerge" /keyfile:key.snk /target:library /copyattrs /targetplatform:v4,"C:\Windows\Microsoft.NET\Framework\v4.0.30319" /out:MainLib.dll MainLib2.dll IncludingLib1.dll IncludingLib2.dll del MainLib2.dll Код: "c:\Program Files (x86)\Microsoft\ILMerge\ilmerge" "C:\Windows\Microsoft.NET\Framework\v4.0.30319" 2. Запустить батник вручную для начала, затем можно будет в параметрах билда проекта задать запуск, но лично мне хватает ручного запуска. Батник переименовывает основную dll, затем создает новый файл MainLib.dll (основная сборка)l и включает в него сборки которые указаны далее MainLib2.dll IncludingLib1.dll IncludingLib2.dll (максимально подключал - 4 сборки, больше не было необходимости, если нужно больше, то указываются через пробел) 3. В bin директорию так же должен попадать .snk ключ, которым подписали сборку(нужно корректное имя указать), можно задать в свойствах файла в проекте, чтобы попадал в output директорию (в моем случае key.snk). 4. Когда все отработает останется 1 сборка MainLib.dll но больше размером. Если не заработает, проверьте что путь к ILMerge указан верно и exe файл не пустого размера. Если пустой нагуглите на microsoft и установите ILMerge. Если что-то не работает, запускайте батник из консоли, хотя бы напишет в чем проблема. |
|
![]() |
#15 |
Чайный пьяница
|
Вопрос - зачем какие то батники, когда можно всего добится и без этого - https://nishantrana.me/2017/05/17/us...plugin-in-crm/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Skel (1). |
![]() |
#16 |
Moderator
|
Цитата:
Сообщение от ZooY
![]() ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).
Про использование ILMerge с плагинами можно почитать тут. ![]()
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() ![]() |
|
![]() |
#17 |
Участник
|
Да кому нужна эта песочница?.. Мы же все профессионалы
![]() Эээ... Нет! Тут нет "скрытых" манипуляций с файлами проекта, все делается через стандартный интерфейс VS. |
|
![]() |
#18 |
Moderator
|
Ну так и в моем подходе тоже
![]() p.s. В моносерверной конфигурации песочница не нужна никому. Если у вас более, или менее серьезная ферма - выхлоп от нее будет
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() ![]() |
|
![]() |
#19 |
Участник
|
Для тех, кто набрел на эту тему в поисках ответа:
Наша команда остановилась на варианте: ILRepack Используем его успешно продолжительное время. Создали шаблоны в VS с нужным набором библиотек и бед не знаем. https://github.com/ravibpatel/ILRepack.Lib.MSBuild.Task Решение хорошее, от себя лишь добавлю - что для включения возможности отладки таких плагинов необходимо в таргет-файле прописать DebugInfo = "true" Пример нашего таргета: ILRepack.targets X++: <?xml version="1.0" encoding="utf-8" ?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name = "AfterBuild" Condition = "'$(Configuration)' == 'Debug'" > <ItemGroup> <InputAssemblies Include="$(OutputPath)\$(AssemblyName).dll"/> <InputAssemblies Include="$(OutputPath)\Newtonsoft.Json.dll"/> </ItemGroup> <ILRepack Parallel="true" InputAssemblies="@(InputAssemblies)" LibraryPath="$(OutputPath)" KeyFile="$(AssemblyOriginatorKeyFile)" TargetKind = "Dll" OutputFile="$(OutputPath)\$(AssemblyName).dll" DebugInfo = "true" /> </Target> </Project> |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|