VS升级报错:Microsoft.SharePoint.Client不存在EventReceivers类型
问题定位
该报错和TokenHelper.cs中是否引入命名空间无关,核心原因是Visual Studio从2015升级到2017的过程中,自动重新解析了项目的SharePoint客户端对象模型(CSOM)程序集引用,替换成了和SharePoint 2013不匹配的版本。
SharePoint 2013版本的CSOM组件中,EventReceivers命名空间下的类型并不包含在通用的Microsoft.SharePoint.Client.dll内,且不同版本SharePoint对应的CSOM程序集有强签名校验,版本错配就会触发指定命名空间找不到的编译错误。
修复步骤
- 清理无效引用
打开项目引用列表,将所有名称以Microsoft.SharePoint.Client开头的已引用程序集全部移除,不要改动TokenHelper.cs等业务代码文件。 - 手动添加适配SP2013的正确程序集
不要使用VS全局程序集缓存(GAC)中自动匹配的高版本CSOM,手动浏览到本地SharePoint 2013 CSOM的默认安装路径:C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\
选中以下三个dll添加到项目引用中:Microsoft.SharePoint.Client.dllMicrosoft.SharePoint.Client.Runtime.dllMicrosoft.SharePoint.Client.EventReceivers.dll
添加完成后逐个选中上述三个引用,在属性面板中将「特定版本」设置为True,「复制本地」设置为True,避免后续VS版本变动自动替换引用版本。
- 校验项目目标框架
打开项目属性面板,在应用程序配置页确认目标框架为**.NET Framework 4.5或4.5.2**,不要选择.NET Core或.NET 4.6及以上版本——SharePoint 2013 Provider Hosted App不兼容高版本.NET运行时,会间接导致程序集解析失败。 - 清理缓存重新编译
关闭Visual Studio,删除项目根目录下的bin、obj缓存文件夹,重新打开项目后执行生成操作,编译错误即可消除。
避坑提示:不要通过NuGet安装最新版的SharePointOnline.CSOM包,该包是适配SharePoint Online的版本,和本地SharePoint 2013的CSOM强签名不兼容,安装后会触发更多类型找不到的异常。
内容的提问来源于stack exchange,提问作者LeoLeo
相关产品推荐
相关产品推荐

