【问题标题】:Why is EasyNetQ failing silently when it's been ILMerged?为什么 EasyNetQ 在被 ILMerged 后静默失败?
【发布时间】:2015-07-31 14:41:22
【问题描述】:

我正在为 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 是如何导致它静默失败而没有实际抛出任何错误或任何东西的。

【问题讨论】:

    标签: rabbitmq dynamics-crm ilmerge easynetq


    【解决方案1】:

    好的,我已经打开 ConsoleLogger 并发现消息正在发布 - 但它们正在发布到不同的交换,因为 ILMerge 步骤正在更改我的消息的限定类型名称

    ILMerged:

    调试:声明的交换:MyPlugin.CrmEntityChange:MyPlugin.Ilmerged 类型:主题,持久:True,autoDelete:False,延迟:False 调试:发布到交换:'MyPlugin.CrmEntityChange:MyPlugin.Ilmerged',路由键:'person.crm2015.changed',correlationId:'094fbde9-f7a3-4884-82d7-8a1792e38d6e'

    未合并:

    调试:声明的交换:MyPluginCrmEntityChange:MyPlugin 类型:主题,持久:True,自动删除:False,延迟:False 调试:发布到交换:'MyPlugin.CrmEntityChange:MyPlugin',路由键:'person.crm2015.changed',correlationId:'e41b4360-04c8-4210-917a-17540d41f3ce'

    所以发生的事情是我的发布者正在发送 MyPlugin.Ilmerged.CrmEntityChange 类型的消息,但我的订阅者正在监听 MyPlugin.CrmEntityChange - 因为没有订阅MyPlugin.Ilmerged.CrmEntityChange 消息,主机上没有创建队列,消息只是被丢弃。

    解决方案 - 嗯,我的 解决方案 - 是修改构建后步骤,以便 ILMerged DLL 与包含我的消息类型的程序集具有相同的名称。这确实意味着您最终会得到两个不同的 DLL,它们都称为 MyPlug.dll - 一个是部署到 CRM 中的 ILMerged 程序集,另一个是订阅者使用的参考程序集 - 但因为这些程序集永远不应该部署到同一个系统,我准备冒这个险。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 2020-08-17
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多