Asp.net SimpleMembershipProvider不工作
我用VS2012启动了一个新的互联网项目,我正试图稍微调整一下我的项目,但我似乎无法让SimpleMemberhsipProvider继续工作。基本上,我所做的就是将模型对象和其他几个项目一起移动到一个核心项目中。我已经实现了Ninject,并且正在尝试通过使用存储库模式来获取数据来抽象实体。我真的觉得我在当前项目中没有太大变化,但由于某种原因,当我现在启动应用程序时,我得到: {“尚未启用角色管理器功能。”} 框架提供的ActionFilter是在以下情况下引发错误的位置: WebSecurity.InitializeDatabaseConnection(“DefaultConnection”、“UserProfile”、“Id”、“UserName”、autoCreateTables:true) 被称为 以下是一些stacktrace: [ProviderException:尚未启用角色管理器功能。]Asp.net SimpleMembershipProvider不工作,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,simplemembership,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Simplemembership,我用VS2012启动了一个新的互联网项目,我正试图稍微调整一下我的项目,但我似乎无法让SimpleMemberhsipProvider继续工作。基本上,我所做的就是将模型对象和其他几个项目一起移动到一个核心项目中。我已经实现了Ninject,并且正在尝试通过使用存储库模式来获取数据来抽象实体。我真的觉得我在当前项目中没有太大变化,但由于某种原因,当我现在启动应用程序时,我得到: {“尚未启用角色管理器功能。”} 框架提供的ActionFilter是在以下情况下引发错误的位置: WebSecuri
System.Web.Security.Roles.EnsureEnabled()+9561885
System.Web.Security.Roles.get_Provider()+8
WebMatrix.WebData.WebSecurity.InitializeProviders(数据库连接信息 连接,字符串userTableName,字符串userIdColumn,字符串 userNameColumn,布尔值自动创建表)+104
WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(字符串 connectionStringName、String userTableName、String userIdColumn、, 字符串用户名列,布尔值自动创建表)+100
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在c:\Users\Kyle\Documents\Visual Studio中 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:42 [InvalidOperationException:ASP.NET简单成员数据库 无法初始化。有关详细信息,请参阅
InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor() 在c:\Users\Kyle\Documents\Visual Studio中 2012\Projects\InoutBoard\InoutBoard.Core\Infrastructure\Filters\InitializeSimpleMembershipAttribute.cs:46
我在github上的以下链接托管代码 签出(在当前线程中) 第二种方式 将以下程序集添加到
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
程序集包含初始化成员资格/角色提供程序并启用角色管理器的启动方法(PreApplicationStartCode.start
)。但是ASP.NET找不到要在您的案例中运行的程序集。通过添加这两行代码,我们强制ASP.NET在这些程序集中搜索PreApplicationStartMethodAttribute
以防其他人收到此错误,并且上述解决方案无法工作,就像我的情况一样。当我尝试添加程序集标记时,它表示子对象无效。我必须如下所示指定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>
我在我的托管公司(WinHost.com)上运行了完全相同的错误-顺便说一句,它们非常棒 我的解决方案是添加到web.config:
<appSettings>
<add key="enableSimpleMembership" value="true" />
</appSettings>
与Mehdi Golchin建议的将程序集添加到web.config不同,另一种方法是将WebMatrix.Data和WebMatrix.WebData上的程序集引用更改为CopyLocal=True。将web.config的键添加为页面:
[]“的看看@RickAndMSFT,我已经读过了。这是一篇很棒的帖子,但它似乎没有回答我的问题。你能详细说明为什么需要这样做吗?很抱歉没有解释,补充道。另请参阅我下面关于将引用设置为本地副本的建议答案。默认的
互联网应用程序
不必使用此选项?该代码在哪里调用此选项?默认internet应用程序将WebMatrix.Data和WebMatrix.WebData引用设置为CopyLocal=True。我同意。我发现了相同的结果。如果我继续阅读答案,可能会节省我一些时间:)我是出于其他原因一时兴起才这样做的(为什么这是加载的,但这不是?这是一种事情)并被它极度困惑。