【问题标题】:Uploading plugin assembly to MS CRM Online programmatically以编程方式将插件程序集上传到 MS CRM Online
【发布时间】:2015-06-24 08:52:57
【问题描述】:

我正在尝试使用我的自定义应用程序而不是 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 进行测试时,代码运行良好。但是,当我将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

提前感谢任何线索。

【问题讨论】:

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

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2014-08-07
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多