我正在尝试使用自定义应用程序将新版本的包含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
?
提前感谢任何线索。
答案 0 :(得分:1)
@ HenkvanBoeijen的评论给了我一个线索,这实际上有所帮助。
我的插件使用外部库,它们使用ILMerge
工具与主代码打包在一起。但。合并过程中出错。生成的文件由我的代码 BEFORE 捕获,由ILMerge
签名。因此,文件本身没问题,但由于它没有使用强名称签名,因此在Isolated
模式下失败并且在Normal
模式下无效。
所以解决方案不是快点让ILMerge
完成它的工作。之后一切正常。