无法找到PeopleManager且SiteUserInfoList未返回全部用户求助
问题解答
一、找不到PeopleManager类型的原因及解决办法
你遇到的CS0246错误,核心原因是缺少必要的程序集引用和命名空间导入:
PeopleManager类属于Microsoft.SharePoint.Client.UserProfiles命名空间,这个类并不包含在你当前引用的Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll里。- 你需要额外引用
Microsoft.SharePoint.Client.UserProfiles.dll程序集,并且在代码顶部添加命名空间导入:using Microsoft.SharePoint.Client.UserProfiles; - 注意要确保
Microsoft.SharePoint.Client.UserProfiles.dll的版本和你当前使用的Client、Runtime版本保持一致(对应V4.0.30319的.NET Framework版本),避免版本不兼容问题。
二、通过SiteUserInfoList获取用户存在缺失的原因及替代方案
为什么会有用户缺失?
SiteUserInfoList是当前站点的用户信息列表,它只存储已经与该站点产生关联的用户——比如被分配了站点权限、直接添加到站点用户集合、或者曾经访问过该站点的用户。租户中未与该站点关联的用户(比如新创建的用户、仅在其他站点活跃的用户)不会出现在这个列表里,这就是你遇到部分用户缺失的原因。
解决办法
根据你的需求选择不同的方案:
获取当前站点的所有用户
直接使用Web.SiteUsers集合,它包含所有被添加到当前站点的用户,比通过列表查询更可靠:var web = clientContext.Web; clientContext.Load(web.SiteUsers, users => users.Include( u => u.Id, u => u.Title, u => u.LoginName, u => u.Email )); clientContext.ExecuteQuery(); foreach (var user in web.SiteUsers) { // 处理用户数据 }获取整个租户的用户(需权限)
如果需要获取租户内的所有用户,在解决了PeopleManager的引用问题后,可以使用用户配置文件API:var peopleManager = new PeopleManager(clientContext); // 获取所有用户的个人资料(示例:如需批量可结合租户级API扩展) var myProfile = peopleManager.GetMyProperties(); clientContext.Load(myProfile); clientContext.ExecuteQuery();注:批量获取租户用户可能需要更高的权限,也可以结合
UserProfileManager类实现(同样需要引用UserProfiles程序集)。
内容的提问来源于stack exchange,提问作者Bassie
相关产品推荐
相关产品推荐

