AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2018, 13:31   #1  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Red face Где плагин CRM Dynamics пытается найти dll библиотеки?
Доброго дня, продолжаю наводить шороху в данной ветке, собственно имеется вопрос.

В один из плагинов внедряем механизм записи логов с помощью NLog, добавил в ссылки нужную библиотеку, указал using все как обычно (например) в консольных приложениях, сама библиотека после билда скопировалась в папку с решением.

Однако, при выполнении плагина по событию, возникает ошибка:

Цитата:
Не удалось загрузить файл или сборку "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c" либо одну из их зависимостей. Не удается найти указанный файл.
Судя по которой при выполнении плагина, он (плагин) не видит NLog.dll.

Так вот спрашиваю, куда ему (плагину) этот dll положить, что бы плагин его увидел?

П.С. пробовал также класть NLog.dll вместе с плагином в: C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly, результат тот же.
Старый 23.05.2018, 15:09   #2  
Skel is offline
Skel
Участник
 
42 / 18 (1) ++
Регистрация: 01.04.2015
Адрес: Москва
Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/
За это сообщение автора поблагодарили: a33ik (1), ximik33rus (1).
Старый 23.05.2018, 17:52   #3  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Цитата:
Сообщение от Skel Посмотреть сообщение
Если в плагине есть ссылка на стороннюю (не MS) сборку, то будут проблемы - в моем случае плагин даже не регистрировался.
Пути обхода: https://blogs.msdn.microsoft.com/crm...from-plug-ins/
Слияние в один dll... а если библиотек много, тяжелый плагин получится.

Сегодня нашел решение конкретно с логгером - это создание веб-сервиса с библиотекой NLog, который будет принимать от плагина данные, подлежащие логированию и писать куда нужно.

Кстати аналогично можно было бы поступить и с другими внешними библиотеками (если очень нужно), создать веб сервис с набором библиотек и методов, которые будут обрабатывать полученные от плагинов данные и возвращать тот или иной результат.
Старый 23.05.2018, 17:56   #4  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Распространенная практика - замерживать вспомогательные библиотеки в библиотеку с плагинами с помощью ILMerge.
Если с этим не хочется связываться, то NLog можно разместить в GAC'е или (что хуже, но тоже работает) в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
__________________
Опыт позволяет ошибаться гораздо увереннее.
За это сообщение автора поблагодарили: ximik33rus (1).
Старый 23.05.2018, 18:00   #5  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Цитата:
в папке Bin самого CRM, т.е в C:\Program Files\Microsoft Dynamics CRM\CRMWeb\bin
Кстати пробовал, не взлетело
Старый 24.05.2018, 05:53   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от ximik33rus Посмотреть сообщение
Слияние в один dll... а если библиотек много, тяжелый плагин получится.
А какая разница тяжелый или нет? Все равно библиотека грузится только один раз и кешируется, а дальше вызывается уже из памяти.

По моему опыту - пользуйтесь ILMerge. Это в Onprem можно по-разному постараться подсунуть эту сборку. Если работаете с онлайн - у вас вариантов немного.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 24.05.2018, 09:54   #7  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Цитата:
Сообщение от ximik33rus Посмотреть сообщение
Кстати пробовал, не взлетело
Не взлетело потому-что по видимому Вы зарегистрировали сборкув DB
Сделайте регистрацию на диске скопируйте сюда
C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly (на всех серверах вашего развертывания)
все ваши сборки и будем Вам счастье
__________________
Читайте SDK!!!
Старый 24.05.2018, 10:45   #8  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
По моему опыту - пользуйтесь ILMerge.
Полностью согласен! Пробовал все перечисленные варианты - сливание сборок в итоге обходиться "дешевле" в разработке, а главное - в поддержке.
__________________
Моё: Cайт - Код - Dynamics365 Tools
Старый 28.05.2018, 09:17   #9  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Билд был Debug, да.
Цитата:
Сообщение от Konstantin Katsovich Посмотреть сообщение
Не взлетело потому-что по видимому Вы зарегистрировали сборкув DB
Сделайте регистрацию на диске скопируйте сюда
C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly (на всех серверах вашего развертывания)
все ваши сборки и будем Вам счастье
ILMerge - попробую, видимо это хорошее решение, раз нашлось такое большое количество его сторонников))

Спасибо за ответы!

Последний раз редактировалось ximik33rus; 28.05.2018 в 09:23.
Старый 29.05.2018, 06:04   #10  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от ximik33rus Посмотреть сообщение
ILMerge - попробую, видимо это хорошее решение, раз нашлось такое большое количество его сторонников))
На самом деле ilmerge - зло, но зло допустимое в данной ситуации.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 29.05.2018, 21:54   #11  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Или попробуйте мой вариант: 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  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Те же яйца, только в профиль, но работает быстрее ILMerge
ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).

Про использование ILMerge с плагинами можно почитать тут.
__________________
Моё: Cайт - Код - Dynamics365 Tools
Старый 31.05.2018, 11:03   #13  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Попробовал я 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   #14  
Буденый is offline
Буденый
Участник
 
70 / 15 (1) ++
Регистрация: 07.06.2010
Адрес: Донецк
Цитата:
Сообщение от ximik33rus Посмотреть сообщение
Не везет мне с этим ILMerge ))
Создайте батник с кодом ниже:
Код:
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
его нужно поместить в bin директорию проекта, и поменять названия сборок на нужные, затем проверьте, что по этим путям все есть, либо попробуйте указать свои, которые есть
Код:
"c:\Program Files (x86)\Microsoft\ILMerge\ilmerge"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319"
1. Билдится проект
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   #15  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Вопрос - зачем какие то батники, когда можно всего добится и без этого - https://nishantrana.me/2017/05/17/us...plugin-in-crm/
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Skel (1).
Старый 02.07.2018, 14:48   #16  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Цитата:
Сообщение от ZooY Посмотреть сообщение
ИМХО, использование ILMerge более очевидно (не нужно скрытых манипуляций с файлами проекта).

Про использование ILMerge с плагинами можно почитать тут.
Увы, этот вариант не будет работать в песочнице. Тем более тут не меньше скрытых манипуляций с файлом проекта
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 02.07.2018, 15:47   #17  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Увы, этот вариант не будет работать в песочнице.
Да кому нужна эта песочница?.. Мы же все профессионалы

Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Тем более тут не меньше скрытых манипуляций с файлом проекта
Эээ... Нет! Тут нет "скрытых" манипуляций с файлами проекта, все делается через стандартный интерфейс VS.
__________________
Моё: Cайт - Код - Dynamics365 Tools
Старый 03.07.2018, 10:10   #18  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Ну так и в моем подходе тоже


p.s. В моносерверной конфигурации песочница не нужна никому. Если у вас более, или менее серьезная ферма - выхлоп от нее будет
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 27.02.2020, 16:19   #19  
ximik33rus is offline
ximik33rus
Участник
 
58 / 10 (1) +
Регистрация: 05.03.2018
Адрес: Россия, Владимир
Для тех, кто набрел на эту тему в поисках ответа:

Наша команда остановилась на варианте: 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>
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2013 Update Rollup 2 Blog bot Dynamics CRM: Blogs 0 15.04.2014 01:15
dynamics-coe: Integrating Microsoft Dynamics CRM 2011 Online with Java and other non-.Net Clients Blog bot Dynamics CRM: Blogs 0 21.09.2013 13:11
Все о Microsoft Dynamics CRM: Построение бизнес-процесса автоматизации ведения Возможной сделки (часть 2) Blog bot Dynamics CRM: Blogs 0 19.04.2012 07:14
Platform updates overview - 3.70.B - NAV2009 R2 Blog bot Dynamics CRM: Blogs 0 07.02.2011 22:06
german_nav_developer: Buildnummern-Übersicht Microsoft Dynamics NAV 2009 Blog bot Dynamics CRM: Blogs 0 04.06.2010 13:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:44.