Я создаю компонент подключаемого модуля для Dynamics CRM 2015. Поскольку мы развертываем его в CRM Online, подключаемый модуль должен быть одной подписанной библиотекой DLL — мы не можем развертывать дополнительные библиотеки DLL вместе с ним и не можем помещать что-либо в GAC. , поэтому я использую ilmerge.exe для объединения и подписания моих сборок в единую DLL.
Проблема в том, что, насколько я вижу, EasyNetQ/RabbitMQ не отправляет никаких сообщений, когда они объединены. Я могу воспроизвести это локально, так что это не проблема среды CRM.
У меня есть три DLL
- MyPlugin.dll
- EasyNetQ.dll
- RabbitMQ.Client.dll
Если я ссылаюсь на эти библиотеки DLL отдельно в своем тестовом коде и вызываю .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 может вызывать сбой без каких-либо ошибок или чего-то еще.