ASP.NET MVC 4 と Web API で構築された既存のアプリケーションがあります。サイトの管理部分はシンプル メンバーシップを使用します。追加された新機能のいくつかを利用するために、アプリケーションを MVC 5 / Web API 2 にアップグレードすることに興味があります。しかし、互換性がない可能性があるようです。
具体的には、NuGet から RC パッケージを私のソリューションのプロジェクトの 1 つにインストールし、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: Microsoft が(さらに別の) メンバーシップと ID ソリューションを導入したことは知っていますが、既存の単純なメンバーシップ テーブルでそれを使用する方法、または既存のすべてのユーザー データのシームレスな移行パスがない限り、それは実際にはオプションではありません。私たちのために。
更新 (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
パッケージには、私のソリューションに追加された 2 つの依存関係がMicrosoft.AspNet.WebPages.Data
ありMicrosoft.AspNet.WebPages.WebData
ます。Microsoft は、WebMatrix クラスを新しいパッケージに移動しました。
そのため、ヘルパーパッケージを追加すると問題が修正されました。これは、それが行っていたことが原因ではなく、壊れたアセンブリの更新されたバージョンが私のソリューションに追加されたためです。したがって、最初の非互換性に対する解決策は、NuGet から他のすべてを更新するときに、これらの新しいパッケージをインストールすることです。
Install-Package Microsoft.AspNet.WebPages.WebData
更新 (2015 年 5 月 13 日)
2 番目の新しいパッケージも手動でインストールする必要があるかもしれないと提案されました。
Install-Package Microsoft.AspNet.WebPages.Data
このパッケージは最初のパッケージの明示的な依存関係であり、NuGet は両方をインストールするのに十分スマートであるため、これは必要ありません。ただし、ビルド時にエラーが発生した場合、または NuGet が依存関係を追加していない場合は、役立つ可能性があります。