我们有一个基于ASP.NET MVC 4和Web API构建的现有应用程序。该站点的管理部分使用简单成员资格。我有兴趣将应用程序升级到MVC 5 / Web API 2,以利用已添加的一些新功能。但是看起来它们可能不兼容。
具体来说,将NuGet的RC软件包安装到我的解决方案中的一个项目中,并更新web.config信息后,该应用程序在启动过程中会在调用的行上开始死亡WebSecurity.InitializeDatabaseConnection()
,但以下情况除外:
[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
WebMatrix.Data.Database.OnConnectionOpened() +70
WebMatrix.Data.Database.EnsureConnectionOpen() +51
WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87
在同一解决方案中,我尚未升级的使用简单成员资格的其他项目仍然可以正常工作。
当然,四处搜寻以获取更多信息会对该异常产生很多影响,但是WebMatrix并没有特别之处。
FWIW:我知道微软已经(另外)引入了成员资格和身份解决方案,但是除非有一种方法可以将其与现有的“简单成员资格”表结合使用,或者为我们所有现有的用户数据提供无缝迁移路径,否则这不是一个选择为我们。
更新(10月11日)
我只是通过重新签出应用程序当前主干再次尝试了此操作。我使用的是Visual Studio 2012,否则按照MS的说明升级现有项目。更新到MVC 5 / Web API 2 / EF 6之后,该应用程序启动运行就很好了。
web.config
移除中没有明确的信任要求。我将这个问题的代码添加到中Global.asax.cs
,它报告该应用程序正在完全信任地运行(在IIS Express中,仅是VS的F5键)。
将相同的呼叫重新添加到InitializeDatabaseConnection()
,它将开始死亡,但异常完全相同。
解决方案(10月28日)
从星期五开始尝试@Kevin更新中的解决方案,我发现它可行。对于我来说,真的很奇怪,添加这个看似无关的软件包可以解决这些安全问题,在我从解决方案中删除该软件包并使其继续工作之后,这更加奇怪。
仔细研究正在发生的事情,我意识到解决此问题的原因非常简单:该Microsoft.AspNet.WebHelpers
程序包有两个依赖项已添加到我的解决方案中:Microsoft.AspNet.WebPages.Data
和Microsoft.AspNet.WebPages.WebData
。Microsoft已将WebMatrix类移动到新程序包中。
因此添加了helpers包来解决问题,不是因为它在做什么,而是因为它导致损坏的程序集的更新版本被添加到我的解决方案中。最初不兼容的解决方案是在更新NuGet的其他所有内容时安装这些新软件包:
Install-Package Microsoft.AspNet.WebPages.WebData
更新(2015年5月13日)
已向我建议您可能还需要手动安装第二个新软件包:
Install-Package Microsoft.AspNet.WebPages.Data
这不是必需的,因为此软件包是第一个软件包的显式依赖项,并且NuGet应该足够聪明以安装这两个软件包。但是,如果在构建时遇到错误,或者看不到NuGet添加依赖项,则可能会对您有所帮助。