自定义成员提供程序错

时间:2011-04-28 14:44:36

标签: asp.net-membership

我有一个自定义的asp.net成员类我正在建立一个我有一个帮助函数的地方 GetUser()方法用于将我的数据库中的值转换为System.Web.Security.MembershipUser对象。

private MembershipUser _converToMembershipUser(MembershipDBModel member)
    {

        System.Web.Security.MembershipUser membershipUser = new System.Web.Security.MembershipUser(
        this.Name,
        member.UserName,
        member.UserID.ToString(),
        member.Email,
        member.PasswordQuestion,
        member.Comment,
        member.IsApproved,
        member.IsLockedOut,
        member.CreationDate,
        member.LastLoginDate,
        member.LastActivityDate,
        member.LastPasswordChangedDate,
        member.LastLockedOutDate);

        return membershipUser;
    }

这是在调用上述方法时我一直得到的错误。我不知道如何解决这个问题,所以任何建议都非常受欢迎。


System.IO.FileLoadException was caught

Message=The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

  Source=System.Web

  StackTrace:

       at System.Web.Security.Membership.Initialize()

       at System.Web.Security.MembershipAdapter.get_Providers()

       at System.Web.Security.MembershipUser..ctor(String providerName, String name, Object providerUserKey, String email, String passwordQuestion, String comment, Boolean isApproved, Boolean isLockedOut, DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate, DateTime lastPasswordChangedDate, DateTime lastLockoutDate)

       at TMTechMembershipProvider.MembershipProvider._converToMembershipUser(MembershipDBModel member) in d:\Visual Studio 2010\Projects\TMTechMembershipProvider\TMTechMembershipProvider\TMTechMembershipProvider.cs:line 1005

       at TMTechMembershipProvider.MembershipProvider.GetUser(String username) in d:\Visual Studio 2010\Projects\TMTechMembershipProvider\TMTechMembershipProvider\TMTechMembershipProvider.cs:line 965

       at TMTechMembershipProvider.MembershipProvider.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object providerUserKey, MembershipCreateStatus& status) in d:\Visual Studio 2010\Projects\TMTechMembershipProvider\TMTechMembershipProvider\TMTechMembershipProvider.cs:line 435
  InnerException: 


 System.Web.Security.MembershipAdapter.get_Providers() Initialize() The given assembly name or codebase was invalid.

配置文件

<?xml version="1.0"?>
<configuration>
  <appSettings></appSettings>

  <connectionStrings>
    <add name="MembershipDBContext" providerName="System.Data.SqlServerCe.4.0" connectionString="data source=MembershipDBContext.sdf"/>
  </connectionStrings>

  <system.web>
    <membership>
      <providers>
        <!--<remove name="AspNetSqlMembershipProvider"/>
        <add name="AspNetSqlMembershipProvider" type="TMTechMembershipProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cbae438f5bab0724" connectionStringName="MembershipDBContext" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="MyUnitTests" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>-->
        <clear/>
        <!--<add name="TMTechMembershipProvider.MembershipProvider" type="TMTechMembershipProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cbae438f5bab0724" connectionStringName="MembershipDBContext" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="MyUnitTests" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>-->
        <add name="TMTechMembershipProvider" 
             type="TMTechMembershipProvider.TempMembershipProvider" 
             connectionStringName="MembershipDBContext" 
             enablePasswordRetrieval="true" 
             enablePasswordReset="true" 
             requiresQuestionAndAnswer="true" 
             applicationName="MyUnitTests" 
             requiresUniqueEmail="true" 
             passwordFormat="Hashed" 
             maxInvalidPasswordAttempts="5" 
             minRequiredPasswordLength="6" 
             minRequiredNonalphanumericCharacters="1" 
             passwordAttemptWindow="10" 
             passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

    <machineKey validationKey="EAA358B778400490DE16A414AC2144C740874D426214CA81D8265354535ACCA9C0238D5C20021D4335DBE1171F31C02F0AB8ADD5B1EE2A6E07CC768F04B20F30" decryptionKey="AF622C5C9796D67DEB876483F1341E3708CA056B1EB031CEAD6FD7CBD0F13A50" validation="SHA1" decryption="AES"/>

  </system.web>


  <!--<system.web>
    <membership>
      <providers>
        <remove name="AspNetSqlMembershipProvider"/>
        <add name="AspNetSqlMembershipProvider"
             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
             connectionStringName="LocalSqlServer"
             enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             applicationName="/"
             requiresUniqueEmail="false"
             passwordFormat="Hashed"
             maxInvalidPasswordAttempts="5"
             minRequiredPasswordLength="1"
             minRequiredNonalphanumericCharacters="0"
             passwordAttemptWindow="10"
             passwordStrengthRegularExpression="" />
      </providers>
    </membership>
  </system.web>-->
  <startup>
    <!--<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>-->
  </startup>
</configuration>

2 个答案:

答案 0 :(得分:1)

这可能不是代码问题,它是dll参考问题。

您需要仔细查看web.config中的任何“type”,“assembly”或“publicKeyToken”xml属性。最可能的原因是您错误地复制了程序集的公钥标记。我首先检查你引用System.Web程序集的任何地方,并确保公钥令牌完全正确,并且任何类型名称都没有拼写错误。

请特别检查web.config中typeadd元素下的provider元素中的membership属性。此外,如果自定义成员资格类是在单独的dll中实现的,请确保您实际上是从该dll引用了正确版本的System.Web程序集。

答案 1 :(得分:1)

错误:“给定的程序集名称或代码库无效”

您的类型属性:

type="TMTechMembershipProvider.TempMembershipProvider" 

您注释行中的类型属性:

type="TMTechMembershipProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cbae438f5bab0724"

您的评论:

  

我倾向于同意,但这是大海捞针。这就是我认为Fusion Log Viewer用于帮助识别无法加载的内容。

sry,但哈哈:)


更新1:重新评论:

发现它很有趣,无法抗拒。没有任何伤害,也没有任何暗示,我们都去过那里。

现在更严肃地说,它似乎仍然是一个问题,特别是那条线。

让我们将它与asp.net提供者的类型行进行比较:

type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

[Provider class (including the namespace)], [dll], [Version], ...

您似乎缺少类或dll。希望能解决它,祝你好运。