|
23.05.2018, 13:31 | #1 |
Участник
|
Где плагин CRM Dynamics пытается найти dll библиотеки?
Доброго дня, продолжаю наводить шороху в данной ветке, собственно имеется вопрос.
В один из плагинов внедряем механизм записи логов с помощью NLog, добавил в ссылки нужную библиотеку, указал using все как обычно (например) в консольных приложениях, сама библиотека после билда скопировалась в папку с решением. Однако, при выполнении плагина по событию, возникает ошибка: Цитата:
Не удалось загрузить файл или сборку "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c" либо одну из их зависимостей. Не удается найти указанный файл.
Так вот спрашиваю, куда ему (плагину) этот dll положить, что бы плагин его увидел? П.С. пробовал также класть NLog.dll вместе с плагином в: C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly, результат тот же. |
|
23.05.2018, 15:09 | #2 |
Участник
|
Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/ |
|
|
За это сообщение автора поблагодарили: a33ik (1), ximik33rus (1). |
23.05.2018, 17:52 | #3 |
Участник
|
Цитата:
Сообщение от Skel
Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/ Сегодня нашел решение конкретно с логгером - это создание веб-сервиса с библиотекой NLog, который будет принимать от плагина данные, подлежащие логированию и писать куда нужно. Кстати аналогично можно было бы поступить и с другими внешними библиотеками (если очень нужно), создать веб сервис с набором библиотек и методов, которые будут обрабатывать полученные от плагинов данные и возвращать тот или иной результат. |
|
24.05.2018, 05:53 | #4 |
Чайный пьяница
|
Цитата:
По моему опыту - пользуйтесь ILMerge. Это в Onprem можно по-разному постараться подсунуть эту сборку. Если работаете с онлайн - у вас вариантов немного.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
24.05.2018, 10:45 | #5 |
Участник
|
Полностью согласен! Пробовал все перечисленные варианты - сливание сборок в итоге обходиться "дешевле" в разработке, а главное - в поддержке.
|
|
23.05.2018, 17:56 | #6 |
Участник
|
Распространенная практика - замерживать вспомогательные библиотеки в библиотеку с плагинами с помощью ILMerge.
Если с этим не хочется связываться, то NLog можно разместить в GAC'е или (что хуже, но тоже работает) в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
__________________
Опыт позволяет ошибаться гораздо увереннее. |
|
|
За это сообщение автора поблагодарили: ximik33rus (1). |
23.05.2018, 18:00 | #7 |
Участник
|
Цитата:
в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
|
|
24.05.2018, 09:54 | #8 |
Участник
|
Не взлетело потому-что по видимому Вы зарегистрировали сборкув DB
Сделайте регистрацию на диске скопируйте сюда C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly (на всех серверах вашего развертывания) все ваши сборки и будем Вам счастье
__________________
Читайте SDK!!! |
|
28.05.2018, 09:17 | #9 |
Участник
|
Билд был Debug, да.
Цитата:
Спасибо за ответы! Последний раз редактировалось ximik33rus; 28.05.2018 в 09:23. |
|
29.05.2018, 06:04 | #10 |
Чайный пьяница
|
На самом деле ilmerge - зло, но зло допустимое в данной ситуации.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
29.05.2018, 21:54 | #11 |
Moderator
|
Или попробуйте мой вариант: http://www.axforum.info/forums/blog.php?b=8256. Те же яйца, только в профиль, но работает быстрее ILMerge
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Skel (1). |
30.05.2018, 10:10 | #12 |
Участник
|
ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).
Про использование ILMerge с плагинами можно почитать тут. |
|
02.07.2018, 14:48 | #13 |
Moderator
|
Цитата:
Сообщение от ZooY
ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).
Про использование ILMerge с плагинами можно почитать тут.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
02.07.2018, 15:47 | #14 |
Участник
|
Да кому нужна эта песочница?.. Мы же все профессионалы
Эээ... Нет! Тут нет "скрытых" манипуляций с файлами проекта, все делается через стандартный интерфейс VS. |
|
31.05.2018, 11:03 | #15 |
Участник
|
Попробовал я ILMerge, через обращение консолью с параметрами к утилите от MS через cmd и так: http://www.pzone.ru/mscrm/crmdev/plu...ustom-ilmerge/, зависает при сборке создавая смерженный файл в 0 байт.
Пробовал через NuGet-плагин, и тоже грабли но на этот раз при сборке обращается не к той директории NetFramework, переназначить на нужный путь не удалось. Пробовал еще таким вот методом смержить: http://www.pzone.ru/mscrm/crmdev/plu...l-custom-merge, он кстати смержил, но некоторые библиотеки не имеют строгого имени, а свои библиотеки я подписывал snk-файлом, но CRM отчаянно ругается на отсутствие строгого имени у библиотеки и вызывает впри выполнении плагина эксепшн Не везет мне с этим ILMerge )) |
|
21.06.2018, 12:55 | #16 |
Участник
|
Создайте батник с кодом ниже:
Код: 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. Если что-то не работает, запускайте батник из консоли, хотя бы напишет в чем проблема. |
|
21.06.2018, 17:40 | #17 |
Чайный пьяница
|
Вопрос - зачем какие то батники, когда можно всего добится и без этого - https://nishantrana.me/2017/05/17/us...plugin-in-crm/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Skel (1). |
03.07.2018, 10:10 | #18 |
Moderator
|
Ну так и в моем подходе тоже
p.s. В моносерверной конфигурации песочница не нужна никому. Если у вас более, или менее серьезная ферма - выхлоп от нее будет
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.02.2020, 16:19 | #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> |
|
|
|