以编程方式将插件程序集上传到 MS CRM Online

Uploading plugin assembly to MS CRM Online programmatically

我正在尝试使用我的自定义应用程序将包含 CRM 插件的新版本插件程序集上传到 MS CRM Online 实例,而不是 PluginRegistrationTool

方法非常简单:

var plugin = new Entity("pluginassembly")
{
    Id = PluginId // correct GUID of the plugin assembly stored in CRM
};

plugin["content"] = Convert.ToBase64String(ReadBinaryFile(filename));

Service.Update(plugin);

当我使用本地 CRM 进行测试时,代码运行良好。但是,当我Service在线指向MS CRM时,结果不成功。

程序集已上传,但当我尝试执行分配给它的步骤时,CRM 触发 SecurityException:

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.Security.SecurityException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #E824CF49Detail: 
<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.Security.SecurityException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #E824CF49</Message>
  <Timestamp>2015-06-24T07:57:27.5491666Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

</TraceText>
</OrganizationServiceFault>

我可以理解,CRM Online 可能会执行额外的检查。但我不明白它到底检查了什么,以及为什么用 PluginRegistrationTool 上传的程序集通过了这个检查,而直接上传——检查失败。

有没有人遇到过这样的问题?也许有人可以在没有逆向工程的情况下帮助回答 PluginRegistrationTool?

提前感谢您提供任何线索。

@HenkvanBoeijen 的评论给了我一个线索,这实际上很有帮助。

我的插件使用外部库,并且使用ILMerge工具将它们与主要代码打包在一起。但。这是合并过程中的错误。结果文件被我的代码捕获 BEFORE 它由 ILMerge 签名。因此,文件本身没问题,但由于它没有用强名称签名,它在 Isolated 模式下失败,在 Normal 模式下正常。

所以解决方案是不要着急,让 ILMerge 完成它的工作。之后一切正常。