カテゴリー
Microsoft

【MVC5】WebForms に MVC5 を含めたプロジェクトですぐに発生した次の問題への対処方法♪ → ファイルまたはアセンブリ ‘System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)

作成環境情報

  • Windows 10 Pro 64 bit
  • Microsoft Visual Studio Community 2015
    Version 14.0.25421.03 Update 3
    Microsoft .NET Framework
    Version 4.6.01038

作成プロジェクト情報

  • .NET Framework 4.6.1
  • ASP.NET Web Application (.NET Framework)
  • ソリューション・プロジェクト名: WebApplication1
  • ASP.NET 4.6.1 テンプレート: Web フォーム
  • フォルダーおよびコア参照を追加する: [x] MVC
  • 認証の変更: 認証なし

エラーを再現する

まずはコードを追加していきます♪

モデルの追加

次のモデルを追加して、ビルド

namespace WebApplication1.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

コントローラーとビューをスキャフォールディング

  1. controllers フォルダで右クリックし、追加 > コントローラー
  2. Entity Framework を使用した、ビューがある MVC 5 コントローラー > 追加
  3. 次を入力して、追加
    • モデルクラス: Person (WebApplication1.Models)
    • データ コンテキスト クラス: [+] をクリックして自動命名されるデータコンテキストをそのまま利用
      なお、WebApplication1.Models.WebApplication1Context という名前となった。
    • [ ] 非同期コントローラー アクションの使用
    • [x] ビューの生成
    • [x] スクリプト ライブラリの参照
    • [x] レイアウト ページの使用
    • コントローラー名: PeopleController

これでコードの追加が完了しました。

それでは実際に動かして、エラーを再現いたします。

エラー再現手順

  1. デバッグ > デバッグなしで開始
  2. URL 末尾に /People をつけてアクセス。
    例えば、http://localhost:50178/People

これで、エラー画面が再現しました><。

エラー詳細

'/' アプリケーションでサーバー エラーが発生しました。

ファイルまたはアセンブリ 'System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 

例外の詳細: System.IO.FileLoadException: ファイルまたはアセンブリ 'System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)

ソース エラー: 

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。

アセンブリ読み込みトレース: 以下の情報は、アセンブリ 'System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' を読み込めなかった原因を調べるのに役立ちます。


警告: アセンブリ バインドのログ記録がオフにされています。
アセンブリ バインドのエラー ログを有効にするには、レジストリ値 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) を 1 に設定してください。
注意: アセンブリ バインドのエラー ログに関連するパフォーマンス ペナルティがあります。
この機能をオフにするには、レジストリ値 [HKLM\Software\Microsoft\Fusion!EnableLog] を削除します。

スタック トレース: 


[FileLoadException: ファイルまたはアセンブリ 'System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)]
   System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +0
   System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) +70
   System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) +40
   System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +37
   System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +65
   System.Web.WebPages.Razor.WebRazorHostFactory.DefaultTypeFactory(String typeName) +8
   System.Web.WebPages.Razor.WebRazorHostFactory.CreateFactory(String typeName) +25
   System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +62
   System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfigCore(RazorWebSectionGroup config, String virtualPath, String physicalPath) +235
   System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig(String virtualPath, String physicalPath) +55
   System.Web.WebPages.Razor.RazorBuildProvider.GetHostFromConfig() +20
   System.Web.WebPages.Razor.RazorBuildProvider.CreateHost() +17
   System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() +60
   System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() +32
   System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) +59
   System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() +212
   System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +29
   System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) +10081625
   System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +294
   System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +103
   System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) +165
   System.Web.Compilation.BuildManager.GetCompiledType(VirtualPath virtualPath) +15
   System.Web.Compilation.BuildManager.GetCompiledType(String virtualPath) +29
   System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.GetCompiledType(String virtualPath) +6
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +54
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.6.1073.0

原因は、Views/web.config 記載のバージョンが実態と異なること

具体的には、System.Web.Mvc が Views/web.config のバージョンは 5.2.0.0 であるのに対し、実際にインストールされているバージョンは 5.2.3 でしたの。

この違いにより、エラーが発生していたのでした><。

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
... 略 ...
PM> Get-Package

Id                                  Versions                                 ProjectName                                                                                           
--                                  --------                                 -----------                                                                                           
... 略 ...
Microsoft.AspNet.Mvc                {5.2.3}                                  WebApplication1                                                                                       
Microsoft.AspNet.Mvc.ja             {5.2.3}                                  WebApplication1                                                                                       
... 略 ...


PM> 

修正

Views/web.config の System.Web.Mvc バージョンを実際にインストールされている 5.2.3 へと変更いたします。

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
... 略 ...

では、確かめてみましょう♪

http://localhost:50178/People にアクセスし、問題ありませんでした!

なお、設定ファイルの修正のため、リビルドは必要ありません

おわりに

最初、エラーの多さに嫌気が差し、すぐに Google 検索に頼ってしまいました><。間違いでしたの><。

最初からエラーメッセージと向き合い、内容から修正箇所を考えるべきでした。

幸い、多くの時間を費やす前に、エラーメッセージと向き合えましたので、予想以上にすぐに問題解決することができましたわ♪

次に同じ失敗を繰り返さないためにも、今回ノートいたします。

以上です。

コメントを残す