Dynamics 365 在Plugin中使用ILMerge打包多个程序集

前言

实施项目的时候,难免在插件中会引用到外部的dll,比如处理文档的MiniExcel,用于序列化和反序列化的Netonsoft.Json等。如果我们不将引用的外部dll和编译生成的plugin.dll文件打包,直接将编译生成plugin.dll部署到环境中的话,插件运行时肯定会报错:xxxxxx未定义、找不到。

为了解决这个问题,我们可以使用ILMerge来进行打包。另外,现在MS还出了另外一种方法,大致的做法是将外部引用上传到Dataverse服务器,其中文件包含了实现IPlugin接口类的所有程序集都关联上,以后只需更新PluginPackage就可以,当插件执行时,Dataverse就会从PluginPackage中拿到dll执行,这样插件所需的dll都能用得上。扯远了,我们开始进入今天的正题 :)

详细步骤

Step 1

选中插件项目,使用Nuget安装 ILMerge

Step 2

ILMerge安装完成后,解决方案的package文件夹中会新增两个文件夹:

Step 3

(重要)把除了第三方引用的dll之外的dll “复制到本地” 属性设置为false。比如我引用的是Mini Excel,那么我将Mini Excel的 “复制到本地” 设置为true,其余的都设置为false。

Step 4

编译Plugin项目,编译完成后bin文件夹中能看到,只有一个dll,将这个plugin.dll通过插件注册工具部署到环境中就可以了

你可以会遇到的问题

问题1

通过插件注册工具注册插件时,提示:“PluginType not found in PluginAssembly which has a total of [0] plugin/workflow activity types.”
大概是你没有将 Microsoft.Crm.Sdk 和 Microsoft.Crm.Sdk.Proxy “复制到本地” 属性设置为false导致。

本站没有评论功能。如果需要和我交流,可以在“关于我”中拿到联系信息。P.S:请注明是通过gdhblog.com拿到的联系信息。