2011-04-28 65 views
1

我有一个自定义的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> 

回答

1

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

你的类型的属性:

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

您的评论:

type="TMTechMembershipProvider.TempMembershipProvider" 

你在你的注释行类型属性

i tend to agree but this is needle in haystack. This is what I thought the Fusion Log Viewer was for to help identify what is failing to load.

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。希望能解决它,祝你好运。

+0

如果您在谈论(呃大笑)我注释了完全定性类型的事实,那么请注意它是否有任何一个条目导致相同的错误。完全合格的类型从反射器复制并粘贴,所以我相信它是正确的。 – ChiliYago 2011-05-11 20:24:54

+0

@ChiliYago - 在更新中回答。 – eglasius 2011-05-11 21:30:14

+0

正确的字符串是:type =“TMTechMembershipProvider.MembershipProvider,TempMembershipProvider,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 1157af4f9eedb03f” – ChiliYago 2011-05-11 23:16:18

1

这是不太可能是一个代码问题,这是一个dll引用问题。

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

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

+0

我倾向于同意,但这是在干草堆针。这就是我认为Fusion Log Viewer用于帮助识别未能加载的内容。 – ChiliYago 2011-05-10 21:26:24

+0

大海捞针?您的web.config中有多少公钥标记?微软是众所周知的。这里有一个想法,编辑你的原始问题,并添加你的web.config,我会为你做。 – 2011-05-10 21:48:10

+0

我的配置已发布,因为您看不到任何其他提及的提及。感谢您的帮助 – ChiliYago 2011-05-11 18:22:28

相关问题