web-dev-qa-db-ja.com

ファイルまたはアセンブリ 'System.Web.Mvc'を読み込めませんでした。正しいリファレンスを使用するには?

MVC 5もサポートするASP.NET Webフォーム上に構築されたアプリケーションがあります。プロジェクトにMVC 5 APIコントローラーを含め、Jsonをバージョン4.5から7.0にアップグレードする必要がありました。アプリケーションを起動したときにこれらの変更を行った後、次のエラーが表示されます。

ファイルまたはアセンブリ「System.Web.Mvc」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

System.Web.Mvcの参照を確認しました。プロパティダイアログでは、ランタイムバージョンはv4.0.30319であり、バージョンは5.0.0.0です。 web.configでは、アセンブリは次のように設定されます。

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="AntiXssLibrary" publicKeyToken="d127efab8a9c114f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
  </dependentAssembly>
  <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.WebPages" 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.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <!--<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>-->
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
</assemblyBinding>

完全なエラーログを以下に示します。

===事前バインド状態情報===ログ:DisplayName = System.Web.Mvc(部分)WRN:アセンブリに部分的なバインディング情報が提供されました:WRN:アセンブリ名:System.Web.Mvc |ドメインID:2 WRN:アセンブリ表示名の一部のみが指定されている場合、部分的なバインドが発生します。 WRN:これにより、バインダーが誤ったアセンブリをロードする可能性があります。 WRN:アセンブリの完全に指定されたテキストIDを提供することをお勧めします。WRN:単純な名前、バージョン、カルチャ、および公開キートークンで構成されます。 WRN:ホワイトペーパー http://go.Microsoft.com/fwlink/?LinkId=10927 を参照して、この問題の詳細と一般的な解決策を確認してください。ログ:Appbase = file:/// C:/ Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/ YuClone/YuClone /ログ:初期PrivatePath = C:\ Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\c#\ YuClone\YuClone\bin Calling Assembly:(不明)。 === LOG:このバインドはデフォルトのロードコンテキストで開始します。ログ:アプリケーション構成ファイルを使用:C:\ Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\c#\ YuClone\YuClone\web.configログ:ホスト構成ファイルを使用:C:\ Users\Ahmed\Documents\IISExpress\config\aspnet.configログ:C:\ Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.configのマシン構成ファイルを使用します。ログ:現在、参照に適用されていないポリシー(プライベート、カスタム、部分、または場所ベースのアセンブリバインド)。ログ:新しいURL file:/// C:/ Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLLのダウンロードを試行しています。ログ:新しいURLファイルのダウンロードを試みます:/// C:/ Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL 。ログ:新しいURLファイルのダウンロードを試みます:/// C:/ Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/ YuClone/YuClone/bin/System.Web.Mvc.DLLログ:アプリケーション構成ファイルを使用:C:\ Users\Ahmed\Documents\Visual Studio 2013\Projects\MediaSoft\Project\c#\ YuClone\YuClone\web.configログ:ホスト構成ファイルを使用:C:\ Users\Ahmed\Documents\IISExpress\config\aspnet.configログ:C:\ Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.configのマシン構成ファイルを使用します。ログ:アプリケーション構成ファイルで見つかったリダイレクト:5.0.0.0が5.2.3.0にリダイレクトされました。ログ:ポストポリシーリファレンス:System.Web.Mvc、バージョン= 5.2.3.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35ログ:新しいURLファイルのダウンロードを試みています:/// C:/ Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc.DLLログ:新しいURLファイルのダウンロードを試みます:/// C:/ Users/Ahmed/AppData/Local/Temp/Temporary ASP.NET Files/root/22a49c5f/2f5ffeb9/System.Web.Mvc/System.Web.Mvc.DLL 。ログ:新しいURLファイルのダウンロードを試みます:/// C:/ Users/Ahmed/Documents/Visual Studio 2013/Projects/MediaSoft/Project/c#/ YuClone/YuClone/bin/System.Web.Mvc.DLL WRN:アセンブリ名を比較すると、不一致が発生しました:マイナーバージョンERR:アセンブリのセットアップの完了に失敗しました(hr = 0x80131040)。プローブが終了しました。

以下はStack Traceです

[FileLoadException:ファイルまたはアセンブリ 'System.Web.Mvc'またはその依存関係の1つを読み込めませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)]

[FileLoadException:ファイルまたはアセンブリ 'System.Web.Mvc、Version = 5.2.3.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName、String codeBase、Evidence assemblySecurity、RuntimeAssembly locationHint、StackCrawlMark&stackMark、IntPtr pPrivHostBinder、Boolean throwOnFileNotFound、Boolean suppressInSecurityChecks、Boolean suppress
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName、String codeBase、Evidence assemblySecurity、RuntimeAssembly locationHint、StackCrawlMark&stackMark、IntPtr pPrivHostBinder、Boolean throwOnFileNotFound、Boolean forIntrospection、Boolean suppressSecurityChecks)+36
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef、Evidence assemblySecurity、RuntimeAssembly reqAssembly、StackCrawlMark&stackMark、IntPtr pPrivHostBinder、Boolean throwOnFileNotFound、Boolean forIntrospection、Boolean suppressSecurityChecks)
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString、Evidence assemblySecurity、StackCrawlMark&stackMark、IntPtr pPrivHostBinder、Boolean forIntrospection)+77
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString、Evidence assemblySecurity、StackCrawlMark&stackMark、Boolean forIntrospection)+21 System.Reflection.Assembly.Load(String assemblyString)+28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName、Boolean starDirective)+38

[ConfigurationErrorsException:ファイルまたはアセンブリ「System.Web.Mvc、Version = 5.2.3.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName、Boolean starDirective)+738
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()+217 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)+130
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)+170
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()+92 System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath、Boolean&isRefAssemblyLoaded)+290
System.Web.Compilation.BuildManager.ExecutePreAppStart()+157
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager、IApplicationHost appHost、IConfigMapPathFactory configMapPathFactory、HostingEnvironmentParameters hostingParameters、PolicyLevel policyLevel、Exception appDomainCreationException)+531

[HttpException(0x80004005):ファイルまたはアセンブリ 'System.Web.Mvc、Version = 5.2.3.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9924184 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr、HttpContext context)+261

System.Web.Mvcのバージョンをアップグレードして正しいアセンブリを指すようにするにはどうすればよいですか?

18
Ahmed Mujtaba

バインディングが正しくないため、エラーが発生しました。私が変更され:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>

  <dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.0.0.0" />

そして、それは今動作します。

12
Ahmed Mujtaba

まあ、それはバージョンバインディングの懸念であり、これに入るユーザーにとってはnow2019のように、たとえばVS 2017、(私が走ったように)、そしてOPが言及したように:

System.Web.Mvcのバージョンをアップグレードして正しいアセンブリを指すようにするにはどうすればよいですか?

常にnuget package managerプロジェクトに応じて正しいバージョンをインストールするために、あなたのためにそれを行います.NETバージョンなど.

以来、私は私の問題を探してここに到達しました:

ファイルまたはアセンブリ「System.Web.Mvc、Version = 5.2.4.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)

バージョンバインディングの懸念の兆候が得られたので、次のことを行いました。 Nuget Mvc Update

それ以降は非常にスムーズに機能しました。

@ Ahmed、正しい方向を指し示してくれてありがとう

7
Irf

私の場合、構成のPageControlsおよびassemblyBinding要素を変更して、 `System.Web.Mvcの現在のバージョンに一致するように解決しました。これは5.2.4.0です。

PageControls

PageControlsセクションで、現在のバージョンのアセンブリ(System.Web.Mvc)のすべてのオカレンスのバージョンを置き換えます。

 <pages controlRenderingCompatibilityVersion="4.0" validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <controls>
    <add Assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc"/>
  </controls>

assemblyBinding

assemblyBindingelementで、アセンブリの以前のすべてのバージョンを次のように現在のバージョンにマップします。

 <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
  </dependentAssembly>

この要素は、古いバージョンを参照するパッケージで使用されます。

「System.Web.Mvc」の現在のバージョンを確認する方法

System.Web.Mvcの現在のバージョンは、[プロパティ]タブで確認できます。次のように、プロジェクト参照からアセンブリを選択します。

enter image description here

注:私は2歳の質問に答えているので、このエラーが発生する理由は現在異なる場合があります

3
ByteArtisan

私の場合、アプリケーションはローカルで正常に動作していましたが、サーバーの1つでは動作していませんでした。 「System.Web.Mvc」のセクションを削除すると、問題が修正されました。

0
Vishal