UserManager.Create: An exception of type 'System.MissingMethodException' occurred in mscorlib.dll but was not handled in user code

落花浮王杯 提交于 2019-12-24 03:43:29

问题


I am currently building a website in Visual Studio Express 2013 for Web, and I am using the default membership functionality for users to register. However, when I open the website on localhost and attempt to register a user, I receive the following error:

An exception of type 'System.MissingMethodException' occurred in mscorlib.dll 
but was not handled in user code

Additional information: Method not found: 'System.Threading.Tasks.Task`1<!!0>
System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(System.Linq.IQueryable`1<!!0>,
System.Linq.Expressions.Expression`1<System.Func`2<!!0,Boolean>>)'.

Here is the stack trace from my browser:

[MissingMethodException: Method not found: 'System.Threading.Tasks.Task`1<!!0> System.Data.Entity.QueryableExtensions.FirstOrDefaultAsync(System.Linq.IQueryable`1<!!0>, System.Linq.Expressions.Expression`1<System.Func`2<!!0,Boolean>>)'.]
   Microsoft.AspNet.Identity.EntityFramework.UserStore`6.GetUserAggregateAsync(Expression`1 filter) +0
   Microsoft.AspNet.Identity.EntityFramework.UserStore`6.FindByNameAsync(String userName) +1071
   Microsoft.AspNet.Identity.UserManager`2.FindByNameAsync(String userName) +177
   Microsoft.AspNet.Identity.<ValidateUserName>d__4.MoveNext() +803
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
   Microsoft.AspNet.Identity.<ValidateAsync>d__0.MoveNext() +468
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +123
   Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +795
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.CultureAwaiter`1.GetResult() +123
   Microsoft.AspNet.Identity.<CreateAsync>d__d.MoveNext() +970
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func`1 func) +409
   Microsoft.AspNet.Identity.UserManagerExtensions.Create(UserManager`2 manager, TUser user, String password) +260
   Account_Register.CreateUser_Click(Object sender, EventArgs e) in c:\Users\Matthew\Documents\College\Senior\CSE 448\Capstone\Capstone\Account\Register.aspx.cs:14
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628026
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

The code the exception is being thrown on is marked with stars:

protected void CreateUser_Click(object sender, EventArgs e)
    {
        var manager = new UserManager();
        var user = new ApplicationUser() { UserName = UserName.Text };

        *****IdentityResult result = manager.Create(user, Password.Text);
        if (result.Succeeded)
        {
            IdentityHelper.SignIn(manager, user, isPersistent: false);
            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        }
        else
        {
            ErrorMessage.Text = result.Errors.FirstOrDefault();
        }
    }

I have been searching for a while but cannot seem to find a solution. I've tried updating all my references, but to no avail. Has anyone else encountered this?


回答1:


Got it! The FirstOrDefaultAsync extension method only exists in the .Net 4.5 Entity Framework assemblies. I had a mixture of .Net 4.0 and .Net 4.5 referenced in different projects. when I changed them all to .Net 4.5 it could use the Async code.




回答2:


Using the above answer of needing .Net 4.5 Entity Framework assemblies, I still had some troubles getting Visual Studio to recognize the new package. Instead, I just opened the NuGet package manager, and "Updated" to one version below the Entity Framework I was currently using (Entity Framework 6.1.3 --> 6.1.2) with .Net 4.5 target framework.




回答3:


Run this on your Package Manager Console Install-Package System.Net.Http -Version 4.3.3



来源:https://stackoverflow.com/questions/27197780/usermanager-create-an-exception-of-type-system-missingmethodexception-occurre

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!