2009-03-19 20 views
2

は、私はちょうど私のウェブサイトをプリコンパイルするためのMSBuildを使用してに切り替えてきたし、今私はこの奇妙なエラーになっています:Membership.GetCurrentUserNameからNullReferenceExceptionが発生するのはなぜですか?

[NullReferenceException: Object reference not set to an instance of an object.] 
System.Web.Security.Membership.GetCurrentUserName() +36 
System.Web.Security.Membership.GetUser() +7 
... 

答えて

3

リフレクターショーを:私はスローMembership.GetUser()への呼び出しを持って

を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になると思います。

関連する問題