我与VS2012开始了一个新的互联网项目,我试图重新调整我的项目,我似乎无法保持SimpleMemberhsipProvider的工作。基本上,我所做的就是将模型对象与其他几个项目一起移动到核心项目中。我已经实现了Ninject,并试图通过使用存储库模式来获取我的数据来抽象实体。我真的不觉得我对当前的项目做了很多改变,但出于某种原因,当我启动应用程序时,我得到了:
{“尚未启用角色管理器功能。”}
框架提供的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,String userTableName,String userIdColumn,String userNameColumn,Boolean autoCreateTables)+104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(字符串 connectionStringName,String userTableName,String userIdColumn, String userNameColumn,Boolean autoCreateTables)+100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在c:\ Users \ Kyle \ Documents \ Visual Studio中 2012 \项目\ InoutBoard \ InoutBoard.Core \基础设施\过滤器\ InitializeSimpleMembershipAttribute.cs:42[InvalidOperationException:ASP.NET简单成员资格数据库 无法初始化。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=256588]
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在c:\ Users \ Kyle \ Documents \ Visual Studio中 2012 \项目\ InoutBoard \ InoutBoard.Core \基础设施\过滤器\ InitializeSimpleMembershipAttribute.cs:46
我在github上通过以下链接https://github.com/keroger2k/InoutBoard
托管代码答案 0 :(得分:25)
第一种方式
检查sphair's answer out(在当前主题中)。
第二种方式
将以下程序集添加到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)
。
答案 1 :(得分:10)
如果其他人收到此错误并且上述解决方案不起作用,就像我的情况一样。当我尝试添加程序集标记时,它表示无效的子对象。我必须指定roleManager和membership标识符,如下所示。一旦我这样做,更新数据库就可以了。
<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>
答案 2 :(得分:10)
我在我的托管公司运行时遇到了完全相同的错误(WinHost.com - 他们非常棒BTW)。
我的解决方案是添加到web.config:
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
答案 3 :(得分:10)
而不是像Mehdi Golchin建议的那样将程序集添加到web.config,而是将WebMatrix.Data和WebMatrix.WebData上的程序集引用更改为CopyLocal = True。
答案 4 :(得分:0)