Kentico UserInfoProvider在控制台应用程序中无法正常工作

此代码在Kentico网站中正常工作:

var users = UserInfoProvider.GetUsers(); for (int x = 0; x < users.Count(); x++ { UserInfo currentUser = users.ElementAt(x); currentUser.SetValue("AcceptsAlerts", equivalentSubscriber.Status != SubscriberStatus.Unsubscribed); UserInfoProvider.SetUserInfo(currentUser); } 

当我将代码移动到控制台应用程序时,对UserInfoProvider的任何调用都会导致错误:“找不到对象类型’cms.usersettings’”

对于获取用户的初始调用,我可以在控制台应用程序中这样做:

 DataSet usersds = new CMS.DataEngine.DataQuery("cms.user.selectall").Execute(); 

然后使用用户数据遍历数据集的Table1:

 UserInfo currentUser = new UserInfo(dtUsers.Rows[x]); 

一切都很好并且正常工作,直到我将更新的用户写回数据库。 除了调用之外,我找不到另一种写入数据的方法:

 UserInfoProvider.SetUserInfo(currentUser); 

有谁知道另一种保存用户数据的方法? 或者解决错误。 错误是运行时错误,据我所知,我已经引用了我需要的所有内容。 我正在编辑的字段是添加到cmsUser表的自定义字段。

使用语句信息:

 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Web; using CMS; using CMS.CustomTables; using CMS.DataEngine; using CMS.Membership; 

在从外部应用程序开始使用Kentico CMS API之前,请确保调用以下行:

 CMS.DataEngine.ConnectionHelper.ConnectionString = "your connection string"; CMS.Base.SystemContext.WebApplicationPhysicalPath = Application.StartupPath; CMS.DataEngine.CMSApplication.Init(); 

然后,您还可以使用UserInfoProvider.GetUsers() 对象查询,而不是使用DataQuery.Execute()

您确定要引用所有必要的组件吗?

以下方案适用于我的机器配置: Kentico 8.xWeb应用程序项目

  1. 在控制台应用程序中引用lib文件夹中的这些程序集

    • CMS.Base
    • CMS.DataEngine
    • CMS.DataProviderSQL
    • CMS.Membership
  2. 然后将连接字符串从Web应用程序的web.config复制到控制台应用程序的App.config

  3. 之后,您可以使用此代码设置自定义用户属性

     static void Main(string[] args) { var users = UserInfoProvider.GetUsers(); foreach (var user in users) { user.SetValue("myTestString", "test"); user.Generalized.SetObject(); } } 

对于想要从外部应用程序(例如获取电子邮件模板)获取API调用的SiteID的任何人,这可能会对您有所帮助。 在Kentico 8.1中,您可以访问站点>常规并获取您站点的代码名称。 然后你可以这样做:

 int siteID = CMS.SiteProvider.SiteInfoProvider.GetSiteID(""); 

希望能帮助到你!