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

C# 以编程方式将插件程序集上载到MS CRM Online,c#,dynamics-crm,dynamics-crm-online,C#,Dynamics Crm,Dynamics Crm Online,我正在尝试使用我的自定义应用程序,而不是PluginRegistrationTool,将包含CRM插件的插件程序集的新版本上载到MS CRM Online实例 方法非常简单: var plugin = new Entity("pluginassembly") { Id = PluginId // correct GUID of the plugin assembly stored in CRM }; plugin["content"] = Convert.ToBase64String(

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

方法非常简单:

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进行测试时,代码运行良好。但是,当我将
服务
指向MS CRM online时,结果并不成功

程序集已上载,但当我尝试执行分配给它的步骤时,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>
未处理的异常:System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault,Microsoft.Xrm.Sdk,Version=7.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35]:System.Security.SecurityException:Microsoft Dynamics CRM遇到错误。管理员或支持的参考号:#E824CF49详细信息:
-2147220970
System.Security.SecurityException:Microsoft Dynamics CRM遇到错误。管理员或支持的参考号:#E824CF49
2015-06-24T07:57:27.5491666Z
我可以理解,CRM Online可能会执行额外的检查。但我无法理解它到底检查了什么,以及为什么使用
PluginRegistrationTool
上传的程序集通过了此检查,而直接上传的程序集却没有通过该检查

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


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

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

我的插件使用外部库,它们与主代码一起使用
ILMerge
工具打包。但是合并过程中出现错误。结果文件在由
ILMerge
签名之前被我的代码捕获。因此,文件本身是正常的,但由于它没有使用强名称签名,所以在
隔离
模式下失败,在
正常
模式下正常


因此,解决方案不是让
ILMerge
尽快完成它的工作。之后一切正常。

查找错误代码(0x80040216),它只告诉我异常是“意外的”。您能够在沙箱中注册相同的本地程序集吗?您是否在线安装了其他插件?@HenkvanBoeijen我刚刚尝试了同样的方法(在沙盒中的Prem环境中注册插件,并通过我的代码进行更新)-结果与CRM Online相同-执行时更新成功且出现意外安全错误。您的插件是否引用了外部库或具有其他依赖项?
SecurityException
提示插件中存在危及安全的构造。您可以在方法调用之前添加跟踪线。JiT编译器在编译第一次需要执行的方法时会遇到安全异常。@HenkvanBoeijen这很有帮助!谢谢我在下面的回答中写下了详细的解释。再次感谢!