【问题标题】:ASP.NET: This method cannot be called during the application's pre-start initialization stageASP.NET:在应用程序的预启动初始化阶段不能调用此方法
【发布时间】:2011-01-07 14:45:17
【问题描述】:

我正在尝试在 IIS 6.0 上运行 ASP.NET MVC 3 站点。

目前,当我从服务器请求页面时,会出现以下错误:

解析器错误消息:在应用程序的预启动初始化阶段无法调用此方法。

在这一行:

<add name="MyMembershipProvider" type="NS.MyMembershipProvider" connectionStringName="MyDatabase" applicationName="/MySite"/>

我完全被难住了,对 ASP.NET 应用程序生命周期一无所知,更不用说 6.0 和 7.0 之间的区别了。阅读有关它的 MSDN 页面似乎没有多大帮助。

有没有人有任何见解或任何好的调查链接? :)

【问题讨论】:

  • 我在 VS localhost 网络服务器 (Cassini) 上遇到了与 MVC 2 相同的问题。
  • 同样的问题(和解决方案)似乎也适用于 IIS 7.0 上的 MVC 3。
  • MVC4 & IIS6 也有这个问题,新项目。通过删除 webmatrix.* 修复,请参见下面的答案。
  • 我有同样的错误,但不是在会员提供者的上下文中,所以接受的答案没有帮助。原来我犯了一个愚蠢的错误,没有在配置部分指定程序集。我将部分名称更改为“fully.qualified.name.of.type, assembly.name”以清除错误。

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

将此添加到您的 web.config(在 appSettings 部分中):

<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>

编辑:

对于那些问为什么的人,这是 mvc 3 release notes 中描述的一个已知问题 更多详情here

【讨论】:

  • 你能详细说明一下吗? web.config 在哪里?钥匙有什么作用?我无法找到这些密钥的在线文档。
  • 我明白了。它会自动定义安全性和成员资格规则,因此您必须在添加自定义规则之前覆盖它们。棘手。
  • 我新建一个项目,没有出现这个错误,也不需要添加这些键。在我现有的项目中,我必须添加这些键才能工作,为什么??
  • 为什么?有人可以链接到一些解释/文档吗?
  • 第一行在 MVC4 中为我修复了它:
【解决方案2】:

将我的一些应用程序从 ASP.NET MVC3 升级到 MVC4 后,我收到了这个错误。这是 WebMatrix 程序集(WebMatrix.WebData.dll 和 WebMatrix.Data.dll)的结果。我从 /bin 目录中删除了这些引用和程序集,这解决了这个问题。

【讨论】:

  • @rboarman - 这已经为我反复修复了它。您确定这些程序集还没有位于 /bin 目录中吗?
  • 如上所述添加密钥修复了它。 WebMatrix.WebData.dll 和 WebMatrix.Data.dll 的存在并没有什么不同。
  • 当我从 MVC4RC 升级到 RTM 时,这为我解决了这个问题。我开始制作一个新项目并复制所有相关的部分。我没有进行任何代码更改,web.config 也没有重大更改。奇怪。
  • 为我修复了它。我的情况是,我为 Azure 安装了一些东西,构建了项目,决定这不是我想要的,并通过 TFS 进行了撤消,所以我的所有代码都与它工作时的状态相同。但是,我的 bin 文件夹有点重。手动清除 WebMatrix 程序集(而不是在项目上调用 Clean)有效。谢谢 Ek0nomik。
  • 谢谢。这为我解决了问题。
【解决方案3】:

@Ek0nomik 是对的。我们从MembershipProvider 迁移到新的ExtendedMembershipProvider,允许我们利用WebMatrix 命名空间中提供的一些新功能。默认情况下,Simple Membership 出于某种原因启用,因此我们必须明确禁用它,因为我们不想使用SimpleMembershipProvider

我们所要做的就是将它添加到 web.config:

<add key="enableSimpleMembership" value="false"/>

启用简单成员会导致提供程序初始化代码在 Application_Start 处理程序之前执行。我们的应用程序结构要求 App_Start 是第一个执行的事情。就我个人而言,我总是期待这一点,但简单会员制改变了这种行为。小心。

【讨论】:

    【解决方案4】:

    好吧,我刚刚收到这个错误,它是由于不小心将 .cshtml 复制到我的项目的根目录中造成的。它甚至没有包含在项目中。删除了那个,错误就消失了。这是 IIS7 上的 MVC3。我想有些人遇到这个问题是在同一条船上。

    【讨论】:

      【解决方案5】:

      这是由于在应用程序中过早地进行了许多反射调用造成的。恰好其他答案中的 Web.Config 建议阻止了这样的反射调用。然而,就我而言:

      我正在使用实体框架,并运行 update-database。我得到了:

      在应用程序的预启动初始化阶段不能调用此方法。

      事实证明,我们的代码使用了最近修改的库,以获取所有命名空间/项目中的所有代码。具体来说,它叫:

      System.Web.Compilation.BuildManager.GetReferencedAssemblies()
      

      卡布姆。这导致了这个模糊的错误。 EF Migrations 运行在一个怪异的区域中,应用程序一半在运行,一半没有,这意味着上述方法永远不能被 Migrations 调用的任何代码调用。

      【讨论】:

        猜你喜欢
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-08
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        相关资源
        最近更新 更多