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这很有帮助!谢谢我在下面的回答中写下了详细的解释。再次感谢!