Dynamics 365 在Plugin中使用ILMerge打包多个程序集
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导致。