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

时间:2015-06-24 08:52:58

标签: c# dynamics-crm dynamics-crm-online

我正在尝试使用自定义应用程序将新版本的包含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

提前感谢任何线索。

1 个答案:

答案 0 :(得分:1)

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

我的插件使用外部库,它们使用ILMerge工具与主代码打包在一起。但。合并过程中出错。生成的文件由我的代码 BEFORE 捕获,由ILMerge签名。因此,文件本身没问题,但由于它没有使用强名称签名,因此在Isolated模式下失败并且在Normal模式下无效。

所以解决方案不是快点让ILMerge完成它的工作。之后一切正常。