我正在尝试创建命令行快速程序,以便将用户从旧系统(非DNN)一次性导入到新系统。但是,NullReferenceException
会抛出以下代码行:
var user = new UserInfo();
user.PortalID = portalId;
user.FirstName = firstName;
在最后一行是异常发生的地方。我知道这个代码在模块中运行时有效,因为它是我正在使用的库的一部分。我想这是错误的,因为UserInfo
类依赖于通常在Web环境中设置的信息。
我有什么方法可以做到这一点?我真的不希望将其作为在生产站点上运行的模块。
答案 0 :(得分:1)
您需要配置必要的提供程序才能使用UserController
和UserInfo
类。最直接的方法是使用网站的工作配置并将应用程序实现为DNN模块。
但您也可以尝试将所需的DLL和配置部分从DNN站点复制到控制台应用程序,并使用DNN源来调试问题。
在这种情况下,源代码告知设置UserInfo
对象的FirstName
属性失败,因为FirstName
属性由配置文件提供程序支持,该提供程序使用缓存提供程序和数据提供程序数据访问。
默认情况下,配置文件由使用DNNProfileProvider
和FileBasedCachingProvider
的{{1}}实施,以获取配置文件属性和数据。调用SqlDataProvider
时,还会为新的UserInfo
对象检索配置文件属性定义。这就是ProfileController.GetUserProfile
被抛出的原因。
DNN 5.6.3中的相应属性是:
<强> UserInfo.vb 强>
NullReferenceException