20

我用 VS2012 开始了一个新的互联网项目,并试图稍微重组我的项目,但我似乎无法让 SimpleMemberhsipProvider 正常工作。基本上,我所做的只是将模型对象与其他几个项目一起移动到核心项目中。我已经实现了 Ninject 并试图通过使用存储库模式来抽象 Entity 来获取我的数据。我真的不觉得我对当前项目有太大的改变,但由于某种原因,当我现在启动应用程序时,我得到:

{“角色管理器功能尚未启用。”}

框架提供的 ActionFilter 是在以下情况下引发错误的地方:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "Id", "UserName", autoCreateTables: true);

叫做。

这是一些堆栈跟踪:

[ProviderException:角色管理器功能尚未启用。]
System.Web.Security.Roles.EnsureEnabled() +9561885
System.Web.Security.Roles.get_Provider() +8
WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect,字符串 userTableName,字符串 userIdColumn,字符串 userNameColumn,布尔 autoCreateTables)+104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(字符串 connectionStringName,字符串 userTableName,字符串 userIdColumn,字符串 userNameColumn,布尔 autoCreateTables)+100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer.. c:\Users\Kyle\Documents\Visual Studio 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:42 中的 ctor()

[InvalidOperationException:无法初始化 ASP.NET 简单成员资格数据库。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=256588]
c:\Users\Kyle\Documents\Visual Studio 2012 中的 InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() \Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:46

我在以下链接https://github.com/keroger2k/InoutBoard在 github 上托管代码

4

5 回答 5

24

第一种方式

检查sphair 的答案(在当前线程中)。

第二种方式

将以下程序集添加到web.config

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add assembly="WebMatrix.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add assembly="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </assemblies>
  </compilation>
</system.web>

更新

WebMatrix.WebData程序集包含一个启动方法来初始化成员资格/角色提供程序并启用 RoleManager ( PreApplicationStartCode.Start)。但是 ASP.NET 找不到在你的情况下运行。通过添加这两行代码,我们强制 ASP.NET 在这些程序集中搜索PreApplicationStartMethodAttribute(s).

于 2012-09-04T07:53:04.880 回答
10

如果其他人收到此错误并且上述解决方案不起作用,就像我的情况一样。当我尝试添加程序集标记时,它说无效的子对象。我必须指定 roleManager 和成员资格标签,如下所示。一旦我这样做了,更新数据库就起作用了。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" 
             type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
      </providers>
    </membership> 
于 2012-10-19T19:16:26.147 回答
10

我在我的托管公司(WinHost.com - 他们是优秀的顺便说一句)运行完全相同的错误。

我的解决方案是添加到 web.config:

<appSettings>
    <add key="enableSimpleMembership" value="true" />
</appSettings>
于 2012-10-30T16:26:28.833 回答
10

与 Mehdi Golchin 建议的将程序集添加到 web.config 不同,另一种方法是将 WebMatrix.Data 和 WebMatrix.WebData 上的程序集引用更改为 CopyLocal=True。

于 2013-01-03T22:43:30.657 回答
0

将密钥添加到 Web.Config 作为页面:

http://devbla.wordpress.com/2013/07/03/corrigindo-o-erro-no-aspnet-the-role-manager-feature-has-not-been-enabled/

[]的

于 2013-07-03T16:27:07.903 回答