Я создаю компонент плагина для Dynamics CRM 2015. Поскольку мы развертываем в CRM Online, плагин должен быть единой подписной DLL - мы не можем развернуть дополнительные DLL вместе с ним, и мы не можем ничего помещать в GAC, поэтому я использую ilmerge.exe, чтобы объединить и подписать мои сборки в одну DLL.Почему EasyNetQ терпит неудачу, когда он прошел ILMerged?
Проблема заключается в том, что, насколько я вижу, EasyNetQ/RabbitMQ не отправляет никаких сообщений, когда они перемещаются. Я могу воспроизвести это локально, поэтому это не проблема среды CRM.
У меня есть три библиотеки DLL
- MyPlugin.dll
- EasyNetQ.dll
- RabbitMQ.Client.dll
Если я ссылаться на эти библиотеки DLL отдельно в моем тестовом коде и invoke .Execute() в моем коде плагина, все работает красиво
У меня есть шаг после сборки:
$(SolutionDir)packages\ilmerge.2.14.1208\tools\ilmerge.exe /out:$(TargetDir)MyPlugin.Ilmerged.dll /keyfile:$(TargetDir)plugin_key.snk $(TargetDir)EasyNetQ.dll $(TargetDir)RabbitMQ.Client.dll $(TargetDir)MyPlugin.dll
Это выплевывает один подписанный DLL, MyPlug.Ilmerged.dll
, что (теоретически!) Содержит EasyNetQ, RabbitMQ и мой плагин код. Все прекрасно компилируется. Если я удалю отдельные ссылки DLL из своего тестового кода и добавлю одну ссылку на эту сборку с ILMerged, она компилируется отлично, а код не генерирует никаких исключений - я просто не получаю сообщений, появляющихся в очереди.
Возможно, это связано с перенаправлением связывания сборки, которое EasyNetQ использует для разрешения RabbitMQ? Или что-то? Я полностью зациклен на том, как ILMerge может заставить его терпеть неудачу без каких-либо ошибок или чего-то еще.