最近、プレリリースバージョンのWebApi OData 5.0フレームワークをインストールして、新しい$ expandサポートを試してみました。すべて正常にビルドされましたが、App_Startで奇妙な例外が発生します。
Attempt by security transparent method
'System.Web.Http.GlobalConfiguration.get_Configuration()'
to access security critical type 'System.Web.Http.HttpConfiguration' failed.
ソースエラー:
Line 12: protected void Application_Start()
Line 13: {
Line 14: WebApiConfig.Register(GlobalConfiguration.Configuration); // <--
Line 15: }
スタックトレース:
[TypeAccessException: Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access
security critical type 'System.Web.Http.HttpConfiguration' failed.]
System.Web.Http.GlobalConfiguration.get_Configuration() +0
API.WebApiApplication.Application_Start() in Global.asax.cs:14
[HttpException (0x80004005): Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access
security critical type 'System.Web.Http.HttpConfiguration' failed.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12863325
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475
[HttpException (0x80004005): Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access
security critical type 'System.Web.Http.HttpConfiguration' failed.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12880068
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12721257
グーグルはほとんど明らかにしません。
パッケージマネージャーコンソールで、指定された順序で次のコマンドを実行します。
Uninstall-Package Microsoft.AspNet.Mvc.FixedDisplayModes
Update-Package Microsoft.AspNet.Mvc -Pre
Update-Package Microsoft.AspNet.WebApi -Pre
Update-Package Microsoft.AspNet.WebApi.Tracing
ここで、web.configに次の変更を適用します。
プロジェクトのWeb.configで、アプリ設定webpages:versionの値を3.0.0.0に更新します
Web.configのセクションruntimeで、構成されている各アセンブリのバージョンを確認し、プロジェクトに追加されているアセンブリのバージョンに更新します。以下は、私のweb.configで更新された構成です。
<ランタイム>
<assemblyBinding xmlns = "urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name = "System.Web.Helpers" publicKeyToken = "31bf3856ad364e35" />
<bindingRedirect oldVersion = "1.0.0.0-3.0.0.0" newVersion = "3.0.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "System.Web.Mvc" publicKeyToken = "31bf3856ad364e35" />
<bindingRedirect oldVersion = "1.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "System.Web.WebPages" publicKeyToken = "31bf3856ad364e35" />
<bindingRedirect oldVersion = "1.0.0.0-3.0.0.0" newVersion = "3.0.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "EntityFramework" publicKeyToken = "b77a5c561934e089" />
<bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "WebGrease" publicKeyToken = "31bf3856ad364e35" />
<bindingRedirect oldVersion = "0.0.0.0-1.3.0.0" newVersion = "1.3.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "System.Web.Http" publicKeyToken = "31bf3856ad364e35" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
</ dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "System.Net.Http.Formatting" publicKeyToken = "31bf3856ad364e35" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
</ dependentAssembly>
</ assemblyBinding>
</ランタイム>
Viewsフォルダーからweb.configを開きます。ここで更新するものが3つあります。
ConfigSectionsで、Razorアセンブリのバージョンを3.0.0.0として更新します。
System.web.webPages.razorセクションでホストのバージョンを更新し、System.Web.Mvc.MvcWebRazorHostFactoryのバージョンを3.0.0.0として更新します。
System.webのページセクションに記載されているバージョン番号がいくつかあります。それらすべてをバージョン5.0.0.0に更新します
Web APIヘルプページがインストールされている場合は、上記のアセンブリ構成も確認してください。
私はこれと同じエラーを抱えていました。 Raviの答えを少し調整したところ、WebApi.OData5.0.0-rc1パッケージを更新/インストールすることでWebApiパッケージを更新するだけで十分であることがわかりました。私はパッケージマネージャーでこれらを実行しました:
Update-Package Microsoft.AspNet.WebApi -Pre
Install-Package Microsoft.AspNet.WebApi.OData -Version 5.0.0
プレリリースバージョンのWebApi.ODataパッケージには、Nugetが依存関係として検査できない新しいバージョンのWebApiパッケージとの依存関係があると思います。繰り返しになりますが、私は技術的にはWebApi ODataの初心者であり、パッケージについてはまだよくわかりませんが、$ expandおよび$ select機能を使用してプロジェクトを実行でき、GlobalConfigurationエラーは発生しません。 :)
必要なのは、VSソリューションのパッケージマネージャーコンソールでコマンド「update-packageMicrosoft.AspNet.WebApi」を実行することだけです。
これの正確な理由はわかりませんが、nugetパッケージの1つが古いバージョン(プレリリースではない)の場合、通常このエラーが表示されます。すべてのnugetパッケージをアップグレードして、これがなくなるかどうかを確認してください。