我刚刚切换到使用msbuild预编译我的网站,现在我收到了这个奇怪的错误:
我有一个对Membership.GetUser()的调用,它抛出:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Security.Membership.GetCurrentUserName() +36
System.Web.Security.Membership.GetUser() +7
...
答案 0 :(得分:3)
Reflector显示Membership.GetCurrentUserName的实现是:
private static string GetCurrentUserName()
{
if (HostingEnvironment.IsHosted)
{
HttpContext current = HttpContext.Current;
if (current != null)
{
return current.User.Identity.Name;
}
}
IPrincipal currentPrincipal = Thread.CurrentPrincipal;
if ((currentPrincipal != null) && (currentPrincipal.Identity != null))
{
return currentPrincipal.Identity.Name;
}
return string.Empty;
}
乍一看,最可能的解释是:
HttpContext.Current不为null,
HttpContext.Current.User为null或具有null Identity属性。
所有其他路径似乎都有null测试。
所以我建议你跟踪HttpContext.User的类型和内容。
HttpContext.Current.User是一个IPrincipal,我知道的IPrincipal的大多数具体实现都不允许使用null标识,所以我打赌HttpContext.User为null。