System.BadImageFormatException 插件执行时

System.BadImageFormatException when plugin executes

我在我的 CRM 2011 实例中注册了一个自定义插件。直到今天,该插件都运行良好,但突然间我在创建记录时遇到了这个 System.BadImageFormatException 错误。我已经尝试研究这个问题,但我只能在注册插件时找到遇到这个问题的人。我的研究使我相信这与 64 位和 32 位有关。我曾尝试将程序集的目标从 "Any CPU" 更改为 64 位,但在插件执行时出现相同的错误。错误详情如下。提前致谢。

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.BadImageFormatException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #6C9D565ADetail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220970</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
  <Message>System.BadImageFormatException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #6C9D565A</Message>
  <Timestamp>2016-03-17T19:05:45.6106609Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

[PluginProfiler.Plugins: PluginProfiler.Plugins.ProfilerPlugin]
[0b8f5ab6-66ec-e511-8367-000c29e9a79c: MultiFamily.PostHomeCreate: Create of anh_home (Profiler)]


</TraceText>
</OrganizationServiceFault>

如果您将其设置为 "Any CPU",它应该可以很好地选择架构 (x86, x64)。

看起来插件分析器的架构(pluginregistration 的编译方式)和您的插件不匹配。 BadImageFormatException 通常由试图加载 x64 程序集的 x86 程序集引发,反之亦然。

我设法解决了我的问题,但我仍然不确定原因是什么。我不是 100% 确定错误与插件代码无关,所以我注释掉了所有代码行(保存注册和执行插件所需的行),通过插件注册工具编译和更新插件.然后,我从 CRM 内部和低端触发了插件执行,并看到插件执行时没有错误。现在我只需要找到导致错误的代码行。这就是事情变得奇怪的地方。

由于完全实现的插件抛出错误,我无法分析和调试插件,所以我求助于逐行恢复插件的功能。每次我要恢复一些功能时,我都会构建、更新程序集并测试 CRM 的插件执行。奇怪的是,我能够恢复所有原始功能,构建、更新和测试插件,没有任何错误。

我不确定可能出了什么问题,但绝对没有任何改变,但我现在有了一个功能齐全的插件。吸取教训,当没有别的办法时,每个人都离开游泳池。

感谢 Jordi 的宝贵时间和评论,希望他们能帮助别人,而不是帮助我。