我正在为 Dynamics CRM 2015 构建一个插件组件。因为我们正在部署到 CRM Online,所以插件必须是一个签名的 DLL - 我们不能在它旁边部署其他 DLL,我们不能在 GAC 中放置任何东西,所以我使用ilmerge.exe将我的程序集合并并签名到一个 DLL 中。
问题是,据我所知,EasyNetQ/RabbitMQ 在合并时没有发送任何消息。我可以在本地重现它,所以这不是 CRM 环境问题。
我有三个 DLL
- 我的插件.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 如何导致它静默失败而实际上没有抛出任何错误或任何东西。