You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ILMerge合并CRM插件与SharePoint Online程序集遇安全异常

CRM插件合并SharePoint程序集后SharePointCredentials抛出安全异常的解决方案

兄弟,我之前做CRM插件合并SharePoint程序集的时候也踩过一模一样的坑!明明反编译能看到类,ClientContext也能正常实例化,一到new SharePointCredentials()就炸安全异常,大概率是合并过程中权限元数据丢失或者强名称验证出问题了,给你几个我亲测有效的解决思路:

1. 用ILMerge参数强制保留权限元数据和强名称

ILMerge默认不会完整保留原程序集的安全属性,尤其是像SharePoint这类带强命名的程序集,合并时权限特性很容易被丢掉。你需要在合并命令里加上这几个关键参数:

  • /keyfile:指定你的CRM插件的强名称密钥文件,确保合并后的程序集重新签名,避免强名称验证失败
  • /copyattrs:复制原程序集的所有属性(包括权限相关的特性)
  • /target:library:因为插件是类库,指定合并后的输出类型为类库

完整命令示例:

ilmerge /target:library /out:YourMergedPlugin.dll YourCrmPlugin.dll Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll /keyfile:YourStrongNameKey.snk /copyattrs

2. 检查SharePointCredentials的权限特性是否丢失

用JustDecompile打开合并后的DLL,找到SharePointCredentials类,看看它是否保留了原程序集中的权限特性(比如[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]这类)。如果特性丢了,说明ILMerge没正确复制元数据,这时候要么调整参数,要么换工具。

3. 换用ILRepack替代ILMerge

ILMerge对复杂程序集的兼容性确实一般,ILRepack是个更现代的合并工具,对.NET程序集的权限元数据和强名称处理更友好。试试用它来合并:

ILRepack /out:YourMergedPlugin.dll /keyfile:YourStrongNameKey.snk YourCrmPlugin.dll Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll

4. 放弃合并,改用依赖部署

如果合并的方式始终绕不开权限问题,不如换个思路:不要合并SharePoint的两个程序集,而是把Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll一起部署到CRM服务器的插件目录(或者GAC),让CRM插件运行时直接加载依赖程序集,这样能彻底避免合并带来的权限冲突。

最后提醒下:调试时一定要看异常的完整堆栈信息,里面会明确指出缺少哪种权限,能帮你更快定位问题!

内容的提问来源于stack exchange,提问作者creatiive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:39:58