ASP.NET:在应用程序的启动前初始化阶段不能调用此方法


135

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

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

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

在这条线上:

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

我完全感到困惑,对ASP.NET应用程序生命周期了解不多,更不用说6.0和7.0之间的区别了。阅读有关它的MSDN页面似乎并没有太大帮助。

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


1
我在VS本地主机Web服务器(Cassini)上使用MVC 2存在相同的问题。
Morten Christiansen

1
同样的问题(和解决方案)似乎也适用于IIS 7.0上的MVC 3。
CrazyPyro 2012年

2
使用新项目的MVC4和IIS6也存在此问题。通过删除webmatrix。*进行了修复,请参见以下答案。
安德鲁·贝克

我遇到了同样的错误,但是不是在成员资格提供者的上下文中,所以被接受的答案没有帮助。原来我犯了一个愚蠢的错误,没有在配置部分中指定程序集。我将节名称更改为“ fully.qualified.name.of.type,assembly.name”以清除错误。
FishesCycle

Answers:


253

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

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

编辑:

对于谁问为什么的,它是在MVC 3中描述的已知问题发行说明 更多细节在这里


3
您可以再扩大一点吗?在web.config中的哪里?钥匙有什么作用?我在查找这些密钥的在线文档时遇到了麻烦。
Kennet Belenky 2011年

2
我懂了。它会自动定义安全性和成员资格规则,因此您必须在添加自定义规则之前覆盖它们。整rick
乔纳森·艾伦,

4
我创建一个新项目,不会发生此错误,并且不需要添加这些键。在我现有的项目中,我必须添加这些键才能使用,为什么?
ridermansb 2011年

2
为什么?有人可以链接到一些说明/文档吗?
马特·科卡伊

1
第一行在MVC4中为我修复了该问题:<add key =“ enableSimpleMembership” value =“ false” />
angularsen 2012年

39

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


2
@rboarman-这已多次为我修复。您确定程序集仍不位于/ bin目录中吗?
贾斯汀·赫尔森

如上所述添加密钥即可对其进行修复。WebMatrix.WebData.dll和WebMatrix.Data.dll的存在对两种方法都没有影响。
rboarman

当我从MVC4RC升级到RTM时,这为我修复了它。我首先创建一个新项目,然后复制所有相关位。我没有进行代码更改,并且web.config也没有任何重大更改。奇怪。
安德鲁·贝克

1
为我修复。我当时处在为Azure安装一些东西,构建项目,决定这不是我想要的并且通过TFS撤消的情况,所以我的所有代码与工作时的状态完全相同。但是,我的bin文件夹比较重。手动清除WebMatrix程序集(与在项目上调用Clean相对)是可行的。谢谢Ek0nomik。
Yetti

谢谢。这为我解决了。
corix010 2012年

8

@ Ek0nomik是正确的。我们从迁移MembershipProvider到了新的版本,ExtendedMembershipProvider从而使我们能够利用WebMatrix命名空间中提供的一些新功能。默认情况下,由于某些原因,启用了简单成员资格,因此我们不得不明确地禁用它,因为我们不希望使用SimpleMembershipProvider

我们要做的就是将其添加到web.config中:

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

启用简单成员身份会导致提供程序初始化代码在Application_Start处理程序之前执行。我们的应用程序结构要求App_Start是要执行的第一件事。就我个人而言,我总是希望如此,但是简单成员资格会改变这种行为。谨防。


6

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


2

这是由于在应用程序中进行任何太早的反射调用所致。碰巧的是,其他答案中的Web.Config建议阻止了这样的反射调用。但就我而言:

我正在使用Entity Framework,然后运行update-database。我有:

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

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

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom。这导致了这个晦涩的错误。EF迁移程序在一个奇怪的区域中运行,在该区域中,应用程序运行了一半,一半没有运行,这意味着上述方法永远不会被迁移程序调用的任何代码调用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.