UseExternalSignInCookie不是Owin.IAppBuilder的成员

Mat*_*uwe 11 vb.net owin asp.net-mvc-5

我有两个VS 2013 MVC 5 SPA网站项目.两者都是新创建的并且尚未修改(即仍为vanilla模板).其中一个有效,一个没有.我能看到的唯一区别是,一个项目是在从VS 2010升级到VS 2012然后再升级到2013年的项目中创建的,并且是解决方案中约60-70个项目之一.另一个是新创建的解决方案,MVC应用程序是其中唯一的项目.

新的MVC应用程序在它自己的解决方案中运行没有任何问题,但是,添加到升级项目的MVC应用程序给出了以下编译时错误:

'UseExternalSignInCookie' is not a member of 'Owin.IAppBuilder'. ...\Mvc5UI\App_Start\Startup.Auth.vb
'UseOAuthBearerTokens' is not a member of 'Owin.IAppBuilder'. ...\Mvc5UI\App_Start\Startup.Auth.vb
'GetExternalAuthenticationTypes' is not a member of 'Microsoft.Owin.Security.IAuthenticationManager'. ...\Mvc5UI\Controllers\AccountController.vb
Run Code Online (Sandbox Code Playgroud)

问题所在的代码(Startup.Auth.vb):

Public Sub ConfigureAuth(app As IAppBuilder)
     '...
    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie)
    app.UseOAuthBearerTokens(OAuthOptions)
    '...
End Sub
Run Code Online (Sandbox Code Playgroud)

和(AccountController.vb)

Public Function GetExternalLogins(returnUrl As String, Optional generateState As Boolean = False) As IEnumerable(Of ExternalLoginViewModel)
    Dim descriptions As IEnumerable(Of AuthenticationDescription) = Authentication.GetExternalAuthenticationTypes()
    '...
End Sub
Run Code Online (Sandbox Code Playgroud)

此代码在升级的解决方案和新构建的解决方案中都是相同的,因此存在环境问题.我已确保NuGet包正确设置.我发现最有趣的事情(可能是我的一个误解)是当我探索程序集元数据时,IAppBuilder我没有看到任何被引用的方法,所以错误是有意义的.然而,问题变成了,为什么它在新创建的MVC应用程序中有效?

Mat*_*uwe 36

当我写这个问题时,我能够确定答案.该UseExternalSignInCookieUseOAuthBearerTokens方法实际上是对IAppBuilder,这就是为什么我很困惑的扩展方法.这些扩展方法可以在Microsoft.Owin.Security.Cookies中找到,显然没有被正确引用.

在搞清楚之后,当我查看项目引用时,我注意到Microsoft.AspNet.Identity.Owin程序集引用已被破坏,因此我使用update-Package -reinstall Microsoft.AspNet.Identity.Owin包管理器命令重新安装该程序包,然后一切都开始工作了.

我现在仍然不确定为什么这会被打破,但它现在正在运作.

  • 给出NuGet控制台命令的+1.谢谢. (3认同)