私はWebプロジェクトを作成しました、そしてそれはビジュアルスタジオでうまく動きます。ただし、azurewebsitesに公開した後、次のエラーが発生しました。問題の原因は何ですか?
ファイルまたはアセンブリ 'System.Web.Http.WebHost、バージョン= 5.0.0.0、カルチャ=ニュートラル、PublicKeyToken = 31bf3856ad364e35'、またはその依存関係の1つをロードできませんでした。見つかった議会のマニフェスト定義が議会の参照と一致しません。 (HRESULTからの例外:0x80131040)
説明:現在のWeb要求の実行中に未処理の例外が発生しました。エラーとコードのどこで発生したかの詳細については、スタックトレースを確認してください。
例外の詳細:System.IO.FileLoadException:ファイルまたはアセンブリ 'System.Web.Http.WebHost、バージョン= 5.0.0.0、カルチャ=ニュートラル、PublicKeyToken = 31bf3856ad364e35'、またはその依存関係の1つを読み込めませんでした。見つかった議会のマニフェスト定義が議会の参照と一致しません。 (HRESULTからの例外:0x80131040)
ソースエラー:
現在のWeb要求の実行中に未処理の例外が発生しました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。
アセンブリロードトレース:アセンブリ 'System.Web.Http.WebHost、Version = 5.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35'をロードできなかった理由を特定するために、次の情報が役立ちます。
WRN:アセンブリバインディングロギングをオフにします。アセンブリバインドエラーのログ記録を有効にするには、レジストリ値[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)を1に設定します。注:アセンブリバインドエラーのログ記録にはパフォーマンスの低下があります。この機能を無効にするには、レジストリ値[HKLM\Software\Microsoft\Fusion!EnableLog]を削除します。
以下はweb.configファイルの一部です。
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
公開された(デプロイされた環境)にdll
がありません。それがローカル、つまりVisual Studioでは機能するがAzure Webサイト環境では機能しない理由です。
アセンブリのプロパティでCopy Local = true
(System.Web.Http.WebHost)を実行してから再展開を実行するだけで、問題なく動作します。
同様のエラー、つまり他のアセンブリが見つからない場合は、そのアセンブリをcopylocal = trueにして再展開するようにしてください。依存関係がわからない場合は、この手順を繰り返します。
それでも答えを探しているなら、これをチェックしてみてください 質問スレッド 。それは私が同じような問題を解決するのを助けました。
編集:私を助けた解決策はPathoschildによって示唆されるように、NugGetパッケージマネージャからUpdate-Package Microsoft.AspNet.WebApi -reinstall
を実行することでした。 Sergey Osypchukの this thread で示唆されているように、.suoファイルを削除してVSを再起動する必要がありました。
私は同じ問題に遭遇し、次のライブラリに対してCopyLocal
をtrueに設定することでそれを解決しました。
System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll
私はMVC4とNET 4を使うことを付け加えなければなりません
私にとってはweb.config
ファイルに次のセクションを追加する作業をしました。
<configuration>
...
<runtime>
...
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
...
</runtime>
...
</configuration>
この例はMVC 5.1を表します。誰かがそのような問題を解決するのに役立つことを願っています。
私にとっては、公開ダイアログの設定の下にあるファイル公開オプションで「追加のファイルを保存先に削除」を選択した後に動作し始めました。
Dllが公開された(デプロイされた環境)にありません。それがローカル、つまりVisual Studioでは機能するがAzure Webサイト環境では機能しない理由です。
アセンブリのプロパティ(System.Web.Http.WebHost)でCopy Local = trueを実行してから再展開を実行するだけで、問題なく動作します。
私はvs2012を使用しています、そして私はアップデートKB2781514がいくつかの設定を変えたと思います。私のMVC4プロジェクト内のすべての私のSystem.Web.Httpがfalseに変わり、私はこのメッセージを受信し続けます。 All file in this project
in publishプロパティを変更しましたが、機能しません。最後にCopy Local = true
を一つずつ変更してこの問題を解決しなければなりません。
同じエラーになり、バージョンを4から3に変更して解決しました。
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<!-- Ensure correct version of MVC -->
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
私のアプリケーションでも同じ問題がありました。
System.web.http.webhost not found.
Visual Studioで実行しているメインプロジェクトからsystem.web.http.webhost
ファイルをコピーして、公開プロジェクトのbin
ディレクトリに貼り付けるだけです。
この後、同じエラーが表示されることがありますが、ディレクトリ名は変更され、system.web.http
になる場合があります。上記と同じ手順に従ってください。すべてのファイルがアップロードされた後に動作します。これは、Visual Studioのnugetパッケージがインターネットからダウンロードするためですが、サーバー上ではダウンロードできません。
このファイルはプロジェクトのbin
ディレクトリにあります。
これは、MVCとWeb API 2を含むプロジェクトタイプ "Web Application"のVS2013(Update 5)/ASP.NET 4.5で発生しました。プロジェクトの作成直後、コードの追加前にエラーが発生しました。次の設定を追加することで私はそれを修正します。 「System.Web.Helpers」を解決した後、「System.Web.Mvc」と「System.Web.WebPages」のために表面化した2つの同様のエラーを出します。
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
ソリューションに複数のプロジェクトがあり、このエラーのためにプロジェクトの1つがビルドに失敗した場合は、そのプロジェクトにWebApi Core nugetパッケージをインストールしたことを確認してください。 System.Web.Httpへの参照を追加するだけでは役に立ちません。そのプロジェクトに正しいnugetパッケージをインストールする必要があります。
私は自分のソリューションに複数のプロジェクトがあり、WebApi Coreはすでに別のプロジェクトにインストールされていました。 System.Web.Httpアセンブリを右クリックしてリストからアセンブリをクリックして参照しましたが、Azureでは機能しませんでしたが、ローカルでは問題なく構築できました。手動参照を削除し、アセンブリ参照を必要とする各プロジェクトにWebApi Core nugetパッケージを追加する必要がありました。
パッケージのバージョンがソリューション全体で同じであることを確認してください。ソリューション全体でMicrosoft.AspNet.Mvc
パッケージをダウングレードおよびアップグレードしたところ、問題は解決しました。
私はweb.configから次のエントリを削除しました、そしてそれは私のために働きました。
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
</dependentAssembly>
"Copy Local"が既にTrueの場合、公開されているファイルを削除して再度公開するとうまくいくことがあります。
たとえば、IISを使用している場合は、Webサイトとそれらが公開されているディレクトリの内容を削除して、もう一度公開します。
保存先に古いバージョンのファイルがある可能性があるため、古いバージョンを使用していないことを確認するために、もう一度公開する前にすべてを削除してください。
いくつかのDLLが見つかりませんでした。次回公開したときにそれらを手動でディレクトリにコピーしても、表示されなくなります。それぞれがすでにVSでローカルにコピーするように設定されています。私にとっての解決策は、Copy Localallyをfalseに設定し、保存してからビルドして、localをtrueにコピーするように設定することでした。今回は、すべてのDLLを正しく公開しました。奇妙な