ASP.NET:このメソッドは、アプリケーションの起動前初期化段階では呼び出すことができません


135

IIS 6.0で実行されているASP.NET MVC 3サイトを取得しようとしています。

現在、サーバーにページをリクエストすると、次のエラーが発生します。

パーサーエラーメッセージ:このメソッドは、アプリケーションの開始前の初期化段階では呼び出すことができません。

この行で:

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

私は完全に困惑しており、6.0と7.0の違いは言うまでもなく、ASP.NETアプリケーションのライフサイクルについての手がかりはほとんどありません。それに関するMSDNページを読むことはあまり役に立たないようです。

誰かが洞察や調査のための良いリンクを持っていますか?:)


1
VS localhostウェブサーバー(Cassini)のMVC 2でも同じ問題があります。
Morten Christiansen

1
この同じ問題(および解決策)は、IIS 7.0のMVC 3にも適用できるようです。
CrazyPyro 2012

2
新しいプロジェクトで、MVC4とIIS6にもこの問題があります。webmatrix。*を削除することで修正されました。以下の回答を参照してください。
Andrew Backer

同じエラーがありましたが、メンバーシッププロバイダーのコンテキストではありませんでした。そのため、受け入れられた答えは役に立ちませんでした。構成セクションでアセンブリを指定せずに、私は愚かな間違いを犯したことがわかりました。エラーをクリアするために、セクション名を「fully.qualified.name.of.type、assembly.name」に変更しました。
FishesCycle 2013年

回答:


253

これをweb.config(appSettingsセクション)に追加します。

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

編集:

理由を尋ねる人にとっては、これはmvc 3 リリースノートに記載されている既知の問題です 。詳細はこちら


3
少し拡張していただけますか?web.configのどこに?キーは何をしますか?これらのキーのオンラインドキュメントを見つけるのに苦労しています。
ケネットベレンキー2011年

2
そうですか。セキュリティとメンバーシップのルールが自動的に定義されるため、カスタムルールを追加する前にそれらをオーバーライドする必要があります。トリッキー。
ジョナサンアレン

4
新しいプロジェクトを作成しましたが、このエラーは発生せず、これらのキーを追加する必要はありません。既存のプロジェクトでは、これらのキーを追加して機能させる必要がありましたが、なぜですか?
ridermansb

2
どうして?誰かがいくつかの説明/ドキュメントにリンクできますか?
Matt Kocaj、2012

1
最初の行でMVC4の問題が修正されました:<add key = "enableSimpleMembership" value = "false" />
angularsen

39

一部のアプリケーションをASP.NET MVC3からMVC4にアップグレードした後、このエラーが発生しました。これは、WebMatrixアセンブリ(WebMatrix.WebData.dllおよびWebMatrix.Data.dll)の結果でした。これらの参照とアセンブリを/ binディレクトリから削除すると、問題が解決しました。


2
@rboarman-これで繰り返し修正されました。アセンブリが/ binディレクトリにまだ残っていないことを確認しますか?
Justin Helgerson、2012年

上記のようにキーを追加して修正しました。WebMatrix.WebData.dllとWebMatrix.Data.dllの存在はどちらの方法でも違いはありませんでした。
rboarman 2012年

これにより、MVC4RCからRTMにアップグレードしたときに問題が解決しました。私は新しいプロジェクトを作成し、関連するすべての部分をコピーすることから始めました。私はコードを変更せず、web.configにも大きな変更はありませんでした。奇妙な。
Andrew Backer

1
私のために修正しました。私は、Azureにいくつかの物をインストールし、プロジェクトを構築し、それが私が望んでいないことであり、TFSを介して元に戻す状況にいたので、すべてのコードは、それが機能していたときのものと同一でした。ただし、私のbinフォルダーは少し重かったです。手動で(プロジェクトでCleanを呼び出すのではなく)WebMatrixアセンブリをクリアすることは機能しました。Ek0nomikに感謝します。
Yetti、

ありがとう。これで修正されました。
corix010 2012

8

@ Ek0nomikは正しいです。WebMatrix名前空間で提供されるいくつかの新機能を利用できるようにするためMembershipProviderに、新しいものに移行しました。デフォルトではシンプルメンバーシップが何らかの理由で有効になっているため、を使用したくありませんので、明示的に無効にする必要がありました。ExtendedMembershipProviderSimpleMembershipProvider

これをweb.configに追加するだけで済みました。

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

シンプルメンバーシップを有効にすると、プロバイダーの初期化コードがApplication_Startハンドラーの前に実行されます。アプリの構造では、App_Startを最初に実行する必要があります。個人的に私はいつもこれを期待しますが、シンプルなメンバーシップはこの振る舞いを変えます。注意してください。


6

ええと、このエラーが発生しました。.cshtmlをプロジェクトのルートに誤ってコピーしたことが原因です。プロジェクトには含まれていませんでした。それを削除するとエラーはなくなりました。これは、IIS7のMVC3で発生しました。この問題を抱えている人々の何人かが同じ船に乗っているのを想像します。


2

これは、アプリケーションで早すぎる多くのReflection呼び出しのいずれかが原因です。他の回答でのWeb.Configの提案が原因で、このようなReflection呼び出しが行われなかったのは偶然です。しかし私の場合:

Entity Frameworkを使用して実行しましたupdate-database。私は得ました:

このメソッドは、アプリケーションの起動前初期化フェーズでは呼び出すことができません。

結局のところ、すべての名前空間/プロジェクトのすべてのコードを取得するように最近変更されたライブラリーを使用するコードがありました。具体的には、次のように呼びました。

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

カブーム。これにより、このあいまいなエラーが発生しました。EF Migrationsは、アプリケーションが半分実行され、半分が実行されていない奇妙なゾーンで実行されます。つまり、上記のメソッドは、Migrationsが呼び出すコードから呼び出すことはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.