Ich habe einen benutzerdefinierten Mitgliedschaftsanbieter erstellt und erhalte den folgenden Fehler beim Versuch, einen neuen "MembershipUser" zu erstellen.Ich kann keinen MembershipUser für einen benutzerdefinierten MembershipProvider erstellen
Typ konnte nicht 'MyTestApp.Membership.TestMembershipProvider' aus Assembly 'System.Web, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' laden.
Ich führe dies von einem Unit-Test-Projekt, so bin ich mir nicht sicher, ob das das Problem verursacht, aber ich habe System.Web, System.Web.ApplicationServices sowie einen Verweis auf MyApp.Membership und MyApp.DataModels (Entitätsobjekte).
Der Fehler passiert in meiner "GetUser" -Funktion, die unten ist, meine Konfiguration ist auch unten.
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
try
{
AccountEntities db = new AccountEntities();
if ((providerUserKey is Guid) == false)
{
return null;
}
User user = (from u in db.Users
where u.UserId == (Guid)providerUserKey
&& u.Application.LoweredApplicationName == this.ApplicationName.ToLower()
select u).FirstOrDefault();
if (user != null)
{ // ERROR: Starts here, user object is correct, data is all there.
return new MembershipUser(this.ProviderName, user.UserName, (object)user.UserId, user.Email, user.PasswordQuestion, user.Comment, user.IsApproved, user.IsLockedOut, user.CreateDate, user.LastLoginDate, user.LastActivityDate, user.LastPasswordChangedDate, user.LastLockoutDate);
}
else
return null;
}
catch (Exception ex)
{
this.WriteToEventLog(ex, "Unable to get user from object '{" + ((Guid)providerUserKey).ToString() + "}'.", "Get User");
return null;
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="AccountEntities" connectionString="metadata=res://*/Account.AccountDataModel.csdl|res://*/Account.AccountDataModel.ssdl|res://*/Account.AccountDataModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source="EDITED";Initial Catalog=CustomAuthentication;Persist Security Info=True;User ID=EDITED;Password=EDITED;MultipleActiveResultSets=True'" providerName="System.Data.EntityClient" />
</connectionStrings>
<system.web>
<membership defaultProvider="TestMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="TestMembershipProvider" type="MyTestApp.Membership.TestMembershipProvider"
applicationName="/"
description="Membership Test"
enablePasswordReset="true"
enablePasswordRetrieval="true"
maxInvalidPasswordAttempts="3"
minRequiredNonAlphanumericCharacters="8"
minRequiredPasswordLength="8"
passwordAttemptWindow="30"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true" />
</providers>
</membership>
</system.web>
</configuration>
Upvote aus der Zukunft. Sie haben mir gerade weitere 4 Stunden damit zugelegt, warum meine Sicherheitsbaugruppe für ein MVC-Projekt, nicht aber für ein Windows Forms-Projekt gut funktioniert hat! – Tommy
Dies half mir, ein Problem nach 10 Minuten der Forschung zu lösen. Es wäre viel schlimmer gewesen wäre es nicht, also, danke! – jason