如何在VS中实现依赖项目嵌入主程序集以解决CRM插件加载异常?
解决CRM插件部署后缺失依赖程序集的问题
我明白你的问题了——现在你的Project2插件程序集依赖的Project1没有被正确嵌入,导致CRM加载时找不到它。咱们用ILMerge在Visual Studio 2015里把两个程序集合并成一个,就能解决这个问题,具体步骤如下:
步骤1:给Project2安装ILMerge
首先,我们需要用ILMerge来合并程序集。打开Visual Studio的包管理器控制台,切换到Project2所在的项目,执行以下命令安装ILMerge NuGet包:
Install-Package ILMerge
步骤2:配置Project1的引用属性
在Project2的引用列表里找到Project1,右键点击它选择属性,然后把复制本地设置为False。这一步是告诉VS不要把Project1的DLL单独复制到输出目录,因为我们要把它合并到主程序集里。
步骤3:添加构建后事件
打开Project2的属性窗口,切换到生成事件标签页,在后期生成事件命令行里输入以下命令(注意根据你的实际项目信息调整版本号和路径):
"$(SolutionDir)packages\ILMerge.3.0.41\tools\net452\ILMerge.exe" /out:"$(TargetDir)Merged_$(TargetFileName)" "$(TargetPath)" "$(SolutionDir)Project1\bin\$(ConfigurationName)\Project1.dll"
参数说明:
$(SolutionDir):自动获取你的解决方案根目录路径ILMerge.3.0.41:你安装的ILMerge版本号,需和实际安装版本匹配/out::指定合并后输出的程序集名称,这里加了Merged_前缀方便区分原文件- 最后两个路径分别是Project2的输出DLL和Project1的输出DLL
步骤4:验证合并结果
构建Project2,然后到输出目录(比如bin\Release)找到合并后的Merged_Project2.dll,用dotPeek打开它,确认Project1的命名空间和代码已经嵌入到这个程序集里,而非作为外部DLL引用。
步骤5:部署合并后的程序集
用CRM Plugin Registration Tool部署这个合并后的程序集,而不是原来的Project2.dll。因为合并后的程序集包含了Project1的所有代码,部署到CRM数据库后,加载时就不会出现找不到依赖的错误了。
额外注意事项
- 确保ILMerge的版本和你的.NET框架版本匹配(CRM 2016适配.NET 4.5,选择对应版本的ILMerge即可)
- 如果Project1还有其他依赖程序集,也要把它们添加到ILMerge的命令里一起合并
- 非沙盒模式下存储在数据库的程序集必须是单一文件,合并后的程序集正好符合这个要求
内容的提问来源于stack exchange,提问作者myth
相关产品推荐
相关产品推荐

